私はMVC4 ApiControllerを使用してAzure Blobにデータをアップロードしています。ここにサンプルコードがあります:MVC 4 async ApiControllerのTask.Factory.StartNewを使用しますか?
public Task PostAsync(int id)
{
return Task.Factory.StartNew(() =>
{
// CloudBlob.UploadFromStream(stream);
});
}
このコードは意味がありますか?私はASP.NETがすでにワーカースレッドでリクエストを処理していると思うので、別のスレッドでUploadFromStreamを実行しても、このメソッドを実行するのに2つのスレッドが使用されているようには見えません(元のワーカースレッドがこのUploadFromStream終了するには?)
私は、非同期のApiControllerは、HttpClient.GetAsyncやSqlCommand.ExecuteReaderAsyncなどのビルトイン非同期メソッドを使用している場合にのみ意味があることを理解しています。これらのメソッドはおそらくI/O完了ポートを内部的に使用しているので、実際の作業中にスレッドを解放することができます。だから私はこれにコードを変更する必要がありますか?一方
public Task PostAsync(int id)
{
// only to show it's using the proper async version of the method.
return TaskFactory.FromAsync(BeginUploadFromStream, EndUploadFromStream...)
}
Postメソッド内のすべての作業は、CPU /メモリ集約であれば、その後、非同期バージョンPostAsyncは、要求のスループットを助けにはなりません。通常の「public void Post(int id)」メソッドを使用する方が良いでしょうか?
多くの質問があります。うまくいけば、それはASP.NET MVCでの非同期使用の私の理解を明確にします。ありがとう。