[解決済み] 非ジェネリックなTaskCompletionSourceまたは代替品
質問
私はアラートウィンドウ (Telerik WPF) を使用していますが、通常は非同期で表示されます (開かれている間、コードは実行され続けます) が、それを async/await を使用して同期にしたいのです。
私はこれを次のように動作させています。
TaskCompletionSource
のようなオブジェクトを返しますが、このクラスは一般的で
Task<bool>
のようなオブジェクトを返してきますが、私が欲しいのは単なる
Task
であり、戻り値はない。
public Task<bool> ShowAlert(object message, string windowTitle)
{
var dialogParameters = new DialogParameters { Content = message };
var tcs = new TaskCompletionSource<bool>();
dialogParameters.Closed += (s, e) => tcs.TrySetResult(true);
RadWindow.Alert(dialogParameters);
return tcs.Task;
}
そのメソッドを呼び出すコードは
await MessageBoxService.ShowAlert("The alert text.")
を待つことができる、似たような機能を持つ汎用的でないタスクを返すにはどうしたらよいでしょうか?
dialogParameters.Closed
イベントが発生するまで待つことができます。 を無視することができることは理解しています。
bool
を無視することができるのは理解できますが、このコードで返されている 私はそれとは異なる解決策を探しています。
どのように解決するのですか?
メソッドを変更することができます。
public Task ShowAlert(object message, string windowTitle)
Task<bool>
を継承しています。
Task
を継承しているので
Task<bool>
を返す一方で
Task
を呼び出し元に対してのみ公開します。
編集してください。
マイクロソフトのドキュメントを見つけました。 http://www.microsoft.com/en-us/download/details.aspx?id=19957 Stephen Toub による 'The Task-based Asynchronous pattern' というタイトルの Microsoft ドキュメントを見つけ、これと同じパターンを推奨する以下の抜粋を掲載しました。
TaskCompletionSource<TResult> に対応する非ジェネリックなものは存在しない。 しかし、Task<TResult> は Task から派生するため、ダミーの TResult (Boolean は良いデフォルト選択で、開発者が Task の消費者が Task<TResult> にダウンキャストすることを懸念する場合、プライベート TResult タイプが使用されるかもしれません)を持つソースを使って単に Task を返す I/O バウンドのメソッドのために使用することが可能です。
関連
-
[解決済み】C#で四捨五入する方法
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] 汎用クラスやメソッドのメンバからTの型を取得する方法
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
-
[解決済み] 非同期メソッドの完了を待つには?
-
[解決済み] await yield return DoSomethingAsync()」は可能か?
最新
-
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'プロパティを参照してください [重複]。
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】Nullableオブジェクトは値を持たなければならない?