2017-11-21 2 views
0

Ich bin neu in Async-Programmierung. Ich möchte wissen, ob ich eine asynchrone Methode habe, stimmt es, dass ich in meiner Methode sync methos anrufe oder nicht? wenn ja, was ist der Vorteil? Diese ist Beispielcode:Rufen Sie sysnc-Methoden in der asynchronen Methode auf?

public async Task ParseFile(int requestId) { 
    await BulkInsertFileRecords(requestId) ; 
    GetInfo();//it’s sysnc method 
} 

protected async Task BulkInsertFileRecords(int requestId) { 
    BulkInsert(requestId);// it’s sysnc method 
} 
+1

Ja, Sie können synchrone Methoden innerhalb einer asynchronen Methode aufrufen. –

+0

Ja, Sie können synchronen Code in Async-Methoden verwenden. –

Antwort

0

Sie können auf jeden Fall synchrone Methoden von asynchron denjenigen nennen. Diese Verfahren würden in der üblichen Weise, d. H. Synchron, im Zusammenhang mit einem asynchronen Verfahren ablaufen.

Natürlich Wickeln einfach eine synchrone Methode in eine async würde man nicht Ihre synchrone Methode keine Vorteile von der asynchronen Ausführung geben: Ihre BulkInsertFileRecords laufen würde genau so, wie es wäre, wenn Sie BulkInsert direkt aufgerufen. In der Tat, seit BulkInsertFileRecords hat keine await drin, es gibt keinen Grund, es async überhaupt zu behalten. Sie können es als void synchrone Methode umschreiben, und nennen es ohne await:

protected void BulkInsertFileRecords(int requestId) { 
    BulkInsert(requestId); 
} 
0

Es sollte beachtet werden, dass Sie möglicherweise Ergebnisse, die nicht sind, was Sie erwarten, wenn die Sync-Methoden sollen die Benutzeroberfläche ändern, in irgendwie.

Daten, an die die UI bindet, müssen ihre geänderten Eigenschaftenauslöser innerhalb des Hauptkontexts für Benutzeroberflächen haben.

Wenn die von Ihnen aufgerufene Synchronisierungsmethode dies erfordert, können Sie die Methode zwar aufrufen, benötigen jedoch zusätzlichen Code, um sicherzustellen, dass sie vom entsprechenden Thread aufgerufen wird.

Application.Current.Dispatcher.Invoke(() => 
    { 
     BulkInsert(requestId); 
     //More UI sync calls here... 
    }); 

Dadurch wird sichergestellt, dass der Aufruf synchron vom asynchronen Thread ausgeführt wird, während er auch im Hauptthread ausgeführt wird. Wenn Sie den Aufruf nur für den Hauptthread benötigen und nicht warten möchten, können Sie stattdessen InvokeAsync aufrufen.

Verwandte Themen