2

作業が完了するまでかなり長い時間を必要とする次の非同期メソッドがあるとします。

void async Task LongWork()
{
    await LONGWORK() // ... long work 
}

ここで、Web API で、その作業をバックグラウンドで実行したいと思います (つまり、LongWork() を開始した後、完了前に Http リクエストを返したい:

これを達成するための 3 つのアプローチを考えることができます。

1) public async Task<string> WebApi()
   {
       ... // do another work

       await Task.Factory.StartNew(() => LongWork());

       return "ok";
   }
2) public async Task<string> WebApi()
   {
       ... // do another work

       await Task.Factory.StartNew(async () => await LongWork());

       return "ok";
   }

3) public async Task<string> WebApi()
   {
       ... // do another work

       Task.Factory.StartNew(async () => await LongWork());

       return "ok";
   }

Q1: アプローチ #1 と #2 の違いは何ですか?

Q2: ASP.NET の世界で、バックグラウンド スレッドで async/await ペアを含むメソッド (この例では、LongWork()) を実行する正しい方法は何ですか? 特に #3 では、「await」はありません。 Task.Factory.StartNew(async () => await LongWork()) の前に。

ありがとう!

4

1 に答える 1