我正在使用新的 TAP 模式进行探测,使用 Task 和 CTP 来实现异步方法。
我有以下代码:
private async void btnAsync01_Click(object sender, RoutedEventArgs e)
{
UpdateTxtLog("Enter in button Async01: " + System.DateTime.Now);
double result = await method01Async();
UpdateTxtLog("exit in button Async01: " + System.DateTime.Now);
UpdateTxtLog("result: " + result.ToString());
}
是让我测试异步方法的 GUI 按钮。
我可以有 method01Aync 的以下实现。
第一的:
private async Task<double> method01Async()
{
return await Task.Factory.StartNew<double>(slowMethod);
}
private double slowMethod()
{
double doubleDummy = 0;
for (double i = 0; i < 1000000000; i++)
{
doubleDummy++;
}
return doubleDummy;
}
第二
private Task<double> method01Aync()
{
return Task.Factory.StartNew<double>(() =>
{
//O métodos auxiliares lentos... etc.
double doubleDummy = 0;
for (double i = 0; i < 1000000000; i++)
{
doubleDummy++;
}
return doubleDummy;
});
}
第三
private Task<double> method01Aync()
{
return TaskEx.Run<double>(() =>
{
double doubleDummy = 0;
for (double i = 0; i < 1000000000; i++)
{
doubleDummy++;
}
return doubleDummy;
});
}
第四个私有任务 method01Async() { return TaskEx.Run(slowMethod); }
菲思
private Task<double> method01Async
{
return TaskEx.Run<double>(() =>
{
return metodoLento();
});
}
我的结果是实施 1 和 4 大约需要 22 秒。同时完成另外两个需要5s。为什么会存在这种差异?在实现 1 和 4 中,仅使用与循环相同代码的辅助方法。
我注意到如果我使用 slowMethod() 作为 Task 的构造函数的参数会非常慢,如果我在 TaskEx 或任务 Factory 中使用委托会很快。为什么会这样?有什么区别?
使用 Task.Factory 或 TaskEx.Run 有什么区别?
将异步与任务与 TAP 模式一起使用的最佳实践是什么?