私は、タスクと Task.Factory でこの奇妙なケースに遭遇しました。だからここに私のコードがあります。
public Task CreateAndStartSyncTask()
{
return Task.Factory.StartNew(async () =>
{
... do stuff ...
await Task.Delay(500);
... do more stuff ...
}
}
public void Synchronize()
{
var syncTask = CreateAndStartSyncTask();
syncTask.Wait(mTimeout);
switch(syncTask.Status) {
case TaskStatus.RanToCompletion:
// VICTORY!
break;
default:
throw syncTask.Exception;
}
}
したがって、ここで私の問題は、この素晴らしいコードを実行すると、「...もっと多くのことを行う...」前にスイッチケースに到達することです。その後、タスクは完了するまで実行を続けます。タスクを完了することを本当に望んでいるので、これは望ましい機能ではありません。
そうは言っても、ここでそれを独自のタスクに含めることは、同期的に処理されるという事実を考えると、この特定のコンテキストでは少し冗長ですが、コードを完全に開示することはできず、タスク完了の考え方全体を本当に理解する必要があります。
タスクが本当に終了したかどうかを実際に確認するにはどうすればよいですか?