我的C#应用程序中有一些需要异步的功能。这是一个相当简单的工作流程,所以我不需要看中它我基本上需要相当于jQuery.Deferred。
我的方法应该返回一个人们可以附加成功和失败处理程序的对象。成功或失败处理程序将只触发一次。我还需要一种在异步过程完成时触发成功/失败的方法。
所以我想要这样的事情:
var asyncTask = ReadSomeStatsFrom("a-really-big-file.txt");
asyncTask.OnSuccess += (stats) => Console.WriteLine("Completed " +stats.ToString());
asincTask.OnFail += (err) => Console.WriteLine("Uh Oh "+err.ToString());
//return control to the calling method and go on to do other stuff
是的我可以创建线程并模拟这种事情,就像我上次在几年前需要这个功能时所做的那样,但是现在还没有'新的东西让这个更整洁吗?我一直听说Rx,它似乎正在解决类似的问题领域(显然还有很多)。
所以 问题1 :我是否正在寻找Rx以获得此功能?如果不是我应该研究的内容。
和 问题2 :以上示例如何查看rx,包括实际表示任务在ReadSomeStatsFrom()
内成功或结束
答案 0 :(得分:4)
Rx似乎非常适合您的需求。
如果ReadSomeStatsFrom
可以同步写入,请尝试:
Observable
.Start(() => ReadSomeStatsFrom("a-really-big-file.txt"))
.Subscribe(
stats => Console.WriteLine("Completed " + stats.ToString()),
err => Console.WriteLine("Uh Oh " + err.ToString()));
我同意TPL可能也很合适,但Rx在很多方面比TPL更具表现力。
答案 1 :(得分:3)
也可以查看Task Paralel Library。它附带clr,它更适合您的需求。 Rx主要用于事件流,而不是单个事件。
我见过一个示例,其中异步io(您的文件读取)几乎直接包装在tpl任务中,但这可能是4.5功能。
答案 2 :(得分:1)
您正在寻找任务并行库,此处的链接http://msdn.microsoft.com/en-us/library/ee372288.aspx将解释库的功能。
具体来说,您希望将处理您的回复看作是页面上讨论的延续。