我已将此标记为.NET 4,因为我使用的是async BCL。使用具有异步功能的异步BCL
我有以下代码:
using System.Threading.Tasks;
public static async Task<ObservableCollection<MyResult>> GetMyData(Params p)
{
DoStuffClass stuff = new DoStuffClass();
ObservableCollection<MyResults> results = null;
await Task.Factory.StartNew(() =>
{
results = stuff.LongDrawnOutProcess(p);
});
return results;
}
我从以前的版本看起来是这样的重构:
static void GetMyDataAsync(Params p, EventHandler<MyArgs> callback)
{
DoStuffClass stuff = new DoStuffClass();
stuff.LoadCompleted += callback;
stuff.LongDrawOutProcessAsync(p)
}
这个灵感来自here。
到目前为止,第一种情况的使用是最简单的,这就是为什么我重构;我的问题是:这种方法有什么缺陷吗? LongDrawnOutProcess
确实击中了数据库。
此行不会编译,因为没有结果属性。 stuff.LoadCompleted + =(args)=> tcs.TrySetResult(args.Result); 我不清楚到底在做什么 - 它只是设置事件处理程序? –
@ pm_2我不知道你班级的活动实际上是什么样子。这个想法只是简单地从事件的参数中获得操作的结果,并相应地设置TCS的结果。 – Servy
对不起,你说得很对......无论如何,这可能是自己问题的主题。非常感谢您的帮助 –