私は非同期プログラミングでちょっと新しいので、多くのことを理解しないでください。私はもう少しお手伝いが必要です。私は私の他の質問で推薦されたようにしました。Funcの結果を取得<タスク<IResponse>>タイムアウトチェック中
public async Task<TResponse> SendRequestAsync<TResponse>(Func<Task<TResponse>> sendAsync)
{
int timeout = 15;
if (await Task.WhenAny(sendAsync, Task.Delay(timeout) == sendAsync))
{
return await sendAsync();
}
else
{
throw new Exception("time out!!!");
}
}
しかし、私はsendAsync()
の結果を得てそれを返す必要があります。だから私は質問があります:
1)Task.Delay
とFunc<Task<TResponse>>
(またはそれの代わりに何か)を使用するにはどうすればよいですか?私はどのように変換タスク(または何か)Funcタスクを把握することはできません。
2)もう一度permormsの要求がある場合はawait sendAsync()
を返します。それは素晴らしいことではありません。どうにかして私のFunc<Task<..>>
の結果を得ることができますか?
「if」内の「sendTaskを待つ」が2回目に実行されない理由を説明することもできますか?ちょっと魔法のようです。 – Amelina
は何も実行しません。非常に簡略化された言葉では、「このタスクが実行されている間に、何か他のことをやって、タスクが完了したらここに戻り、残りのメソッドを実行し続ける」のようなものです。このタスクは既に完了しているので、例外があるかどうかを確認してスローします。 – Evk
@Amelinaしかし、単純化された説明に頼るのではなく、async \ awaitについての記事を読んでください。 – Evk