TaskとCTPを使用して非同期メソッドを実装し、新しいTAPパターンでプローブを実行しています。
私は次のコードを持っています:
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;
}
2番
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;
});
}
第3
private Task<double> method01Aync()
{
return TaskEx.Run<double>(() =>
{
double doubleDummy = 0;
for (double i = 0; i < 1000000000; i++)
{
doubleDummy++;
}
return doubleDummy;
});
}
4番目のプライベートタスクmethod01Async(){return TaskEx.Run(slowMethod); }
フィス
private Task<double> method01Async
{
return TaskEx.Run<double>(() =>
{
return metodoLento();
});
}
私の結果は、実装1と4で22秒近くかかるということです。その間に終了するには、他の2つは5秒かかります。なぜこの違いが存在するのですか?実装1と4では、ループと同じコードで補助メソッドのみを使用します。
TaskのコンストラクターのパラメーターとしてslowMethod()を使用すると非常に遅くなり、TaskExまたはタスクFactoryでデリゲートを使用すると高速になることに気付きました。なぜこれが起こるのですか?違いはどれですか?
Task.FactoryまたはTaskEx.Runの使用の違いはどれですか?
TAPパターンでタスクと非同期を使用するためのベストプラクティスは何ですか?