我有以下兩個任務的示例。第一個完成時,第二個應該使用第一個結果。我在這個領域II新,如果有人指導我如何IT連鎖將不勝感激:連鎖繼續與任務
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