【发布时间】:2016-06-25 09:01:04
【问题描述】:
我需要从一个地方下载一个文件,然后将它上传到一个 azure blob。完成后我还需要返回 blob 的大小:
public async Task<Stream> Download(string url)
{
using (var client = new HttpClient())
{
return await client.GetStreamAsync(url);
}
}
public async Task<long> Upload(Stream stream, string filename)
{
var container = GetBlobContainer(..);
var blob = container.GetBlockBlobReference(filename);
await blob.UploadFromStreamAsync(stream);
blob.FetchAttributes();
return blob.Properties.Length;
}
public async Task<long> Action()
{
var stream = await Download("https://.....");
var size = await Upload(stream, "newfile.dat");
return size;
}
问题
在完整的流下载到内存之前会调用
Upload方法吗?Upload是否会在HttpClient开始接收字节后立即开始将字节上传到 azure?如果没有 - 是否可以这样做?
奖励:
将生成多少种不同的上下文?是否应该使用
.ConfigureAwait(false)来限制上下文切换?blob.FetchAttributes()是获取 blob 大小的正确方法吗?
【问题讨论】:
标签: .net async-await azure-blob-storage dotnet-httpclient