少し読んだところで、System.Threading.Taskに関してawaitとasyncキーワードの基本を把握していると思います。タスクを待っている:タスクを返すか、コードがないのを待ってから待ちます
私はちょっとした問題に直面しているかどうかはわかりませんが、検証を求めているのか、誰かが私を訂正するのかどうか分かりません。
私はこの署名で、非同期メソッドを実装しています:
public Task ProcessUploadedFile(FileInfo info, string contentType);
を明らかに、私はメソッドの内部で何かを待つしたい場合は、私は、署名に非同期キーワードを追加する必要が
私の質問はこれです:私のメソッドが最後に行うことは、別の非同期メソッドを呼び出すか、タスクを返す場合、それを待っているポイントがありますか?
例:
1:
public async Task ProcessUploadedFile(FileInfo info, string contentType)
{
foreach (var something in someCollection)
DoSomething();
DoSomethingElse();
await DoMethodAsync();
}
2:
public Task ProcessUploadedFile(FileInfo info, string contentType)
{
foreach (var something in someCollection)
DoSomething();
DoSomethingElse();
return DoMethodAsync();
}
私は当初、前者を書いていないが、もはやのawaitを追加することでポイントを見ることができます。もし私が後者を書いていたら、私は同じことを成し遂げました、そして両方の方法の呼び出し元は、もし彼らが選択すれば、待っているキーワードを使用することができますか?
上記に相違はありますか?どちらが「良い」ですか?
グレート、それは私が考えたものだが。ありがとう! –
待ってください。何かを明確にすることはできますか?あなたの書き直したバージョンのコードでは、Task.Factory.StartNew()のDoSomething()とDoSomethingElse()は正しいですか?私はこれらのビットが呼び出し元と同じスレッドで同期して実行されると考えましたか?それはDoMethodAsync()です。ContinueWith(t => {} _); ? –
@dark_perfect申し訳ありませんが、急いでいました。そしてはい、あなたは完全に正しいです。更新されたコード –