[解決済み] C#におけるPromiseの等価性
2023-05-03 20:37:45
質問
Scalaでは、手動でFutureを完了するために使用される可能性のあるPromiseクラスがあります。私はC#で代替品を探しています。
私はテストを書いており、私はそれがこのように見えるようにしたいです。
// var MyResult has a field `Header`
var promise = new Promise<MyResult>;
handlerMyEventsWithHandler( msg =>
promise.Complete(msg);
);
// Wait for 2 seconds
var myResult = promise.Future.Await(2000);
Assert.Equals("my header", myResult.Header);
これはおそらくC#のパターンとしては適切でないことは理解していますが、多少異なるパターンでも同じことを実現する合理的な方法を見つけ出すことができませんでした。
編集: 注意してほしいのは、その
async
/
await
は、ここでは役に立ちません。私はただ、別のスレッドで実行されるハンドラへのアクセスを持っているだけです。
どのように解決するのですか?
C#の場合。
-
Task<T>
は未来(またはTask
はユニットリターンフューチャー)。 -
TaskCompletionSource<T>
はプロミスです。
ですから、あなたのコードは次のように翻訳されます。
// var promise = new Promise<MyResult>;
var promise = new TaskCompletionSource<MyResult>();
// handlerMyEventsWithHandler(msg => promise.Complete(msg););
handlerMyEventsWithHandler(msg => promise.TrySetResult(msg));
// var myResult = promise.Future.Await(2000);
var completed = await Task.WhenAny(promise.Task, Task.Delay(2000));
if (completed == promise.Task)
; // Do something on timeout
var myResult = await completed;
Assert.Equals("my header", myResult.Header);
timeed asynchronous wait"は少し厄介ですが、現実のコードでは比較的珍しいものです。ユニットテストでは、私なら通常の非同期待ちを行います。
var promise = new TaskCompletionSource<MyResult>();
handlerMyEventsWithHandler(msg => promise.TrySetResult(msg));
var myResult = await promise.Task;
Assert.Equals("my header", myResult.Header);
関連
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み] C#でawaitを使わずに非同期メソッドを安全に呼び出す方法
-
[解決済み】非同期プログラミングとマルチスレッドの違いは何ですか?
-
[解決済み】FutureとPromiseの違いって何?
-
[解決済み】JavaScriptのDeferred、Promise、Futureの違いは何ですか?
-
[解決済み] .then()チェーンで以前のプロミス結果にアクセスするにはどうすればよいですか?
最新
-
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'プロパティを参照してください [重複]。
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] デッドロックを引き起こす非同期/awaitの例