2017-11-21 12 views
0

私はAsync Programmingの新機能です。非同期メソッドがあるかどうかを知りたいのですが、メソッド内で同期メソッドを呼び出すのは本当ですか?はいの場合は、それは何の利点ですか? これはサンプルコードです非同期メソッドのsysncメソッドを呼び出しますか?

+1

はい、非同期メソッド内で同期メソッドを呼び出すことができます。 –

+0

はい、 'async'メソッドで同期コードを使用できます。 –

答えて

0

同期メソッドを非同期メソッドから確実に呼び出すことができます。これらのメソッドは、非同期メソッドのコンテキストで通常の方法で、つまり同期して実行されます。

はもちろん、単にあなたの同期方法に非同期実行のいずれかの利点を明らかにしなかったasync一つに同期メソッドをラップする:あなたが直接BulkInsertを呼び出した場合、あなたのBulkInsertFileRecordsは、それが正確だろうな方法を実行します。実際には、BulkInsertFileRecordsにはawaitが含まれていないので、それを保持する必要はありません。asyncあなたはvoid同期メソッドとしてそれを書き換え、およびawaitせずに、それを呼び出すことができます。

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

あなたが同期メソッドがであなたのUIを変更することになっている場合は、あなたが期待するものではありません結果を得るかもしれないことに留意すべきです何らかの形で。

UIがバインドするデータのプロパティを変更するには、メインUIのスレッドコンテキスト内でトリガが発生する必要があります。

呼び出し元の同期メソッドでこれを必要とする場合でも、メソッドを呼び出すことはできますが、適切なスレッドから呼び出されるようにするには余分なコードが必要です。

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

これにより、非同期スレッドから同期的に呼び出しが行われ、同時にメインスレッドでも実行されます。ある時点でメインスレッドで呼び出しが発生する必要があり、待機したくない場合は、代わりにInvokeAsyncを呼び出すことができます。

関連する問題