非同期ではないがを返すメソッドがあるとします。Task
(定義は非同期実装用にも意図されているインターフェースからのものであるため)
public Task DoWorkAsync(Guid id)
{
// do the work
return ...;
}
返すための最良のオブジェクトは何ですか?私の現在の選択肢:
return Task.Yield();
return Task.FromResult<object>(null);
// any of the other but cached in a static field and reused.
あなたは戻ることができませんTask.Yield()
ではないTask
しかしYieldAwaitable
で使用するためawait
そして、それは実際には非同期性を導入します。詳細はこちら)
私が使うTask.FromResult(Type.Missing)
この目的のために。おそらく、文書化されていないにもかかわらず最も効率的なオプションはTask.Delay(0)
、静的な完了タスクを返します。
Task.Delay(0)
。必要に応じて、キャッシュすることができます。 - noseratioTask.FromResult<object>(null)
しかし、.NETチームは好む傾向がありますTask.FromResult(0)
。どちらもキャッシュされていません。 - Stephen Cleary0x4000
「破棄しない」という意味です。そして作成してキャッシュするnew Task(false, (TaskCreationOptions)0x4000, System.Threading.CancellationToken.None)
あなた自身… - Knaģis
Microsoft.net 4.6では、Taskクラスはこの目的のために静的プロパティを持ちます。
Task.CompletedTask
https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.completedtask(v=vs.110).aspx