私は次の2つのサンプルを持っています。最初のものが終わると、2番目のものは最初の結果を使うべきです。私は、誰かがそれをチェーンにどのように私を導いた場合いただければ幸いです。このフィールドIIで新しいです:チェーンを続ける
public async Task<string> UploadFile(string containerName, IFormFile file)
{
//string blobPath = "";
var container = GetContainer(containerName);
var fileName = file.FileName;
CloudBlockBlob blob = container.GetBlockBlobReference(fileName);
using (var memoryStream = new MemoryStream())
{
// await file.CopyToAsync(memoryStream);
// await blob.UploadFromStreamAsync(memoryStream);
// upload only when the 'memoryStream' is ready
Task.Factory.StartNew(() => file.CopyToAsync(memoryStream))
.ContinueWith(m => blob.UploadFromStreamAsync(m.Result)); // ??
}
return blob.Uri.AbsoluteUri;
}
第二の変形されていない場合:
public string UploadFile(string containerName, IFormFile file)
{
var container = GetContainer(containerName);
var fileName = file.FileName;
CloudBlockBlob blob = container.GetBlockBlobReference(fileName);
using (var memoryStream = new MemoryStream())
{
file.CopyToAsync(memoryStream).Wait();
blob.UploadFromStreamAsync(memoryStream).Wait();
//Task.Factory.StartNew(() => file.CopyToAsync(memoryStream))
// .ContinueWith(m => blob.UploadFromStreamAsync(m.Result)); // ??
}
return blob.Uri.AbsoluteUri;
}
memoryStreamのライフサイクルに注意してください。最初のタスクが完了する前に処分されます。 – GhostTW