@@ -50,7 +50,7 @@ public interface ISignalLibHandle
50
50
//Frontend API
51
51
SignalStore Store { get ; set ; }
52
52
Task SendMessage ( SignalMessage message , SignalConversation conversation ) ;
53
- void SetMessageRead ( long index , SignalConversation conversation ) ;
53
+ Task SetMessageRead ( long index , SignalConversation conversation ) ;
54
54
void ResendMessage ( SignalMessage message ) ;
55
55
List < SignalMessageContainer > GetMessages ( SignalConversation thread , int startIndex , int count ) ;
56
56
void SaveAndDispatchSignalConversation ( SignalConversation updatedConversation , SignalMessage updateMessage ) ;
@@ -331,15 +331,15 @@ await Task.Run(() =>
331
331
/// Marks and dispatches a message as read. Must not be called on a task which holds the handle lock.
332
332
/// </summary>
333
333
/// <param name="message"></param>
334
- public void SetMessageRead ( long index , SignalConversation conversation )
334
+ public async Task SetMessageRead ( long index , SignalConversation conversation )
335
335
{
336
336
Logger . LogTrace ( "SetMessageRead() locking" ) ;
337
- SemaphoreSlim . Wait ( CancelSource . Token ) ;
337
+ await SemaphoreSlim . WaitAsync ( CancelSource . Token ) ;
338
338
try
339
339
{
340
340
Logger . LogTrace ( "SetMessageRead() locked" ) ;
341
341
conversation = SignalDBContext . UpdateMessageRead ( index , conversation ) ;
342
- DispatchMessageRead ( index , conversation ) ;
342
+ await DispatchMessageRead ( index , conversation ) ;
343
343
}
344
344
finally
345
345
{
@@ -489,7 +489,7 @@ internal void DispatchHandleMessage(SignalMessage message, SignalConversation co
489
489
if ( result != null )
490
490
{
491
491
SignalDBContext . UpdateMessageRead ( result . Index , conversation ) ;
492
- DispatchMessageRead ( result . Index , conversation ) ;
492
+ DispatchMessageRead ( result . Index , conversation ) . Wait ( ) ;
493
493
wasInstantlyRead = true ;
494
494
break ;
495
495
}
@@ -514,7 +514,7 @@ internal void DispatchHandleUnreadMessage(SignalMessage message)
514
514
Task . WaitAll ( operations . ToArray ( ) ) ;
515
515
}
516
516
517
- internal void DispatchMessageRead ( long messageIndex , SignalConversation conversation )
517
+ internal async Task DispatchMessageRead ( long messageIndex , SignalConversation conversation )
518
518
{
519
519
List < Task > operations = new List < Task > ( ) ;
520
520
foreach ( var dispatcher in Frames . Keys )
@@ -524,6 +524,10 @@ internal void DispatchMessageRead(long messageIndex, SignalConversation conversa
524
524
Frames [ dispatcher ] . HandleMessageRead ( messageIndex , conversation ) ;
525
525
} ) ) ;
526
526
}
527
+ foreach ( var waitHandle in operations )
528
+ {
529
+ await waitHandle ;
530
+ }
527
531
Task . WaitAll ( operations . ToArray ( ) ) ;
528
532
}
529
533
0 commit comments