rxでは次のように書くことができます:
var oe = Observable.FromEventPattern<SqlNotificationEventArgs>(sqlDep, "OnChange");
次に、observableをサブスクライブして、sqlDepオブジェクトのOnChangeイベントをobservableに変換します。
同様に、タスク並列ライブラリを使用してC#イベントからタスクを作成するにはどうすればよいですか?
編集:説明 Drewが指摘し、user375487が明示的に記述したソリューションは、単一のイベントで機能します。タスクが終了するとすぐに...まあそれは終了します。
監視可能なイベントは、いつでも再度トリガーできます。観測可能な流れとして見ることができます。TPLデータフローの一種のISourceBlock。ただし、ドキュメントhttp://msdn.microsoft.com/en-us/library/hh228603(v=vs.110).aspxには、ISourceBlockの例はありません。
私は最終的にそれを行う方法を説明するフォーラムの投稿を見つけました:http ://social.msdn.microsoft.com/Forums/en/tpldataflow/thread/a10c4cb6-868e-41c5-b8cf-d122b514db0e
public static ISourceBlock CreateSourceBlock(Action、Action、Action、ISourceBlock> executor){var bb = new BufferBlock(); executor(t => bb.Post(t)、()=> bb.Complete()、e => bb.Fault(e)、bb); bbを返す; }
//Remark the async delegate which defers the subscription to the hot source.
var sourceBlock = CreateSourceBlock<SomeArgs>(async (post, complete, fault, bb) =>
{
var eventHandlerToSource = (s,args) => post(args);
publisher.OnEvent += eventHandlerToSource;
bb.Complete.ContinueWith(_ => publisher.OnEvent -= eventHandlerToSource);
});
私は上記のコードを試していません。非同期デリゲートとCreateSourceBlockの定義の間に不一致がある可能性があります。