2017-07-09 3 views
1

Timerを5秒間実行し、同時にバックエンドへのネットワーク要求を開始したいと考えています。私はその後、タイマーと要求の両方が完了するのを待ってからアクションを実行したいと思います。C#タイマーとネットワークコールを並列に処理する

private async void doWork() 
{ 
    await Task.Delay(5000); 
    await doPostRequest(); 
    doSomethingElse(); 
} 

並列に実行これらのタスクの両方を持っている以外は、上記のコードのような何か、。これどうやってするの?

答えて

5

あなたはそのためのTask.WhenAllを使用することができます。また、すぐにそれらのいずれかが完了すると完了Task.WhenAnyあり

private async void doWork() 
{ 
    await Task.WhenAll(
     Task.Delay(5000), 
     doPostRequest()); 
    doSomethingElse(); 
} 

このメソッドからタスクを返さないことは意図的ですか?今すぐdoWorkを待つことはできません。

+0

はい、意図的です。私はこのシナリオで 'doWork'から何かを取り戻す必要はありません。ありがとう! – nassan

+3

@nassan:いくつかの理由から、あなたは[async void'を避けるべきです(https://msdn.microsoft.com/en-us/magazine/jj991977.aspx)。結果を持たない非同期メソッドの適切な戻り値の型は 'void'ではなく' Task'です。 –