タスクとCTPを使用して非同期メソッドを実装する新しいTAPパターンでプローブを実行しています。タスクと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は、およそ10mlの液体フッ化水素を圧入くれ22Sを取るということです。一方、他の2人は5秒かかる。なぜこの違いが存在するのですか?実装1と4では、ループと同じコードを持つ補助メソッドのみを使用します。
私は、タスクのコンストラクタのパラメータとしてslowMethod()を使用すると、非常に遅く、TaskExまたはタスクファクトリでデリゲートを使用する場合、ファクトリが高速であることに気付きました。なぜこれが起こるのですか?違いは何ですか?
Task.FactoryまたはTaskEx.Runを使用した場合の違いは何ですか?
TAPパターンのタスクで非同期を使用するベストプラクティスは何ですか?