[解決済み】非同期メソッドをアウトパラメータで書くには?
2022-04-01 12:01:54
質問
非同期メソッドに
out
パラメータは、こんな感じ。
public async void Method1()
{
int op;
int result = await GetDataTaskAsync(out op);
}
でどのように行うのですか?
GetDataTaskAsync
?
解決方法は?
で非同期メソッドを持つことはできません。
ref
または
out
パラメータを指定します。
Lucian WischikがこのMSDNスレッドで、なぜこれが不可能なのかを説明しています。 http://social.msdn.microsoft.com/Forums/en-US/d2f48a52-e35a-4948-844d-828a1a6deb74/why-async-methods-cannot-have-ref-or-out-parameters
<ブロッククオート非同期メソッドが参照外パラメータをサポートしない理由については? (それはCLRの制限です。私たちは 非同期メソッドは、イテレータメソッドと同様の方法で実装されています。 つまり、コンパイラがそのメソッドを ステートマシン・オブジェクトです。のアドレスを保存する安全な方法はありません。 または参照パラメータをオブジェクトのフィールドとして使用します。 参照出力パラメータをサポートする唯一の方法は、次のような場合です。 非同期機能は、低レベルの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);
}
関連
-
[解決済み] ディープクローンオブジェクト
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] C#で同期メソッドから非同期メソッドを呼び出すには?
-
[解決済み] C#でメソッドをパラメータとして渡す
-
[解決済み] 非同期Task<T>メソッドを同期的に実行するにはどうしたらいいですか?
-
[解決済み] C#でawaitを使わずに非同期メソッドを安全に呼び出す方法
-
[解決済み] Task.Runをメソッドに入れないと非同期にはならないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み] メソッド呼び出し元へ複数の値を返す
-
[解決済み】Tupleクラスで "Item1", "Item2 "よりも優れた命名法