非同期と出力パラメータ: ジレンマ
開発者は出力パラメータを使用して非同期メソッドを記述する必要があることがよくありますが、.NET Framework では次のような問題が発生します。この点では課題です。
問題
次のコード スニペットは問題を示しています:
public async void Method1() { int op; int result = await GetDataTaskAsync(out op); }
このコードは出力パラメーターを使用して非同期メソッドを作成しようとしていますが、そのような機能は .NET では使用できません。フレームワーク。
推論
によるとMicrosoft エンジニアの Lucian Wischik 氏によると、この制限は CLR での非同期メソッドの実装方法に起因するそうです。これらはコンパイラによってステート マシン オブジェクトに変換されますが、このオブジェクトには出力パラメータまたは参照パラメータのアドレスを保存するための安全なメカニズムがありません。
回避策
一般的な回避策非同期メソッドにタプルを返させることです:
public async Task Method1() { var tuple = await GetDataTaskAsync(); int op = tuple.Item1; int result = tuple.Item2; } public async Task<Tuple<int, int>> GetDataTaskAsync() { //... return new Tuple<int, int>(1, 2); }
このアプローチは、メソッドから複数の値を返す方法を提供します。 out パラメーターに頼らない非同期メソッド。
以上が.NET の非同期メソッドで出力パラメータを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。