Visual Studioはこのコードに対して警告を出します( 'この呼び出しは待機されていないため、呼び出しが完了する前に現在のメソッドの実行が継続されます)。非同期メソッドをvoidを返すと宣言して、CS4014の警告を消すことはできますか?
static void Main(string[] args)
{
FireAndForget(); // <-- Warning CS4014
// Do something else.
}
static async Task FireAndForget()
{
// Do something (cannot throw).
}
私の理解では、ファイア・アンド・フォーゲットが例外をスローすることはありませんので、この特定のケースでの作業を待つことはないOKであるということです。
プラグマで警告を無効にする代わりに、FireAndForgetの戻り値の型をTaskからvoidに変更することを検討していました。コンパイラを効果的に消すことができます。
static async void FireAndForget() // <-- Task changed to void
{
// Do something (cannot throw).
}
しかし、Stephen Clearyによると、「非同期のボイド」メソッドは、私は何をすべきかは非常にわからない避けるべきです。
メソッドが最初に待たされるように設計されておらず、例外がスローされない場合は、 '非同期void'メソッドを使用しても問題ありませんか?
*最初に待たされる方法はありません。*どういう意味ですか? 'FireAndForget'は実際に何をしていますか? –
なぜこれは落ちた+閉鎖の投票? – ken2k
@ ken2k私は閉会に投票しませんでしたが、客観的に正解のない意見ベースの質問として、これがどこに見えるのか分かります。たぶん「それはOKですか?」と言い換えることができます。「利点と欠点は何ですか?」 – pseudocoder