我正在使用新的TAP模式進行探測,使用Task和CTP來實現異步方法。任務和TAP異步模式:差異bwteewn factory.StartNew和TaskEx.Run
我有以下代碼:
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(){ 回報 TaskEx.Run(slowMethod); }
FITH
private Task<double> method01Async
{
return TaskEx.Run<double>(() =>
{
return metodoLento();
});
}
我的結果是:實施1和4把我22S aprox的。同時另外兩個需要5秒。爲什麼存在這種差異?在實現1和4中,只使用循環中具有相同代碼的輔助方法。
我已經注意到,如果我使用slowMethod()作爲Task的構造函數的參數非常慢,並且如果我在TaskEx中使用委託或者在任務Factory中速度很快。爲什麼會發生這種情況?有哪些不同?
這是使用Task.Factory或TaskEx.Run的區別嗎?
什麼是與TAP模式的任務使用異步的最佳做法?