非同期タスクを現時点で開始せずに作成したいと考えています。私は私の関数に戻り値を追加した例外を処理する。しかし型付き非同期タスクの作成
private Task CreateTask() {
return new Task(
async() => await DoSomething().ConfigureAwait(false));
}
:型指定されていないタスクを は問題ありません。しかし、どのようにして正しい構文で書くことができますか:
private Task<bool> CreateTask() {
return new Task<bool>(
async() => await DoSomething().ConfigureAwait(false));
}
非同期ラムダ式をfuncに変換できないというメッセージが表示されます。 だから私の質問:どのように正しく書かれていますか?
どちらの方法が間違っています。 'DoSomething()'はすでに実行中のタスクを返しているので、 'return(Task)DoSomething();'のようにそのまま返すことができます。 'await' *はすでに実行中のタスクが完了するのを待っています。非同期に開始することはありません。 'new'でコールドタスクを作成する理由はありません。 2番目のケースでは、値は何であるはずですか? –
[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のようなものです。あなたはXに問題があります.Yが解であると思って、それがうまくいかないときYについて質問してください。解決したい*実際の問題は何ですか? –
例外ハンドラで 'await'呼び出しを囲む例外処理は、同期メソッドの場合と同じです。 'await'は元の例外をスローします。 try {.... await CallMyServer();} catch(WebException exc)と同じように、 'try {.... await CallMyServerAsync();} catch(WebException exc){...} ){{}} 'CallMyServer'がブロッキングメソッドである場合 –