gpt4 book ai didi

c# - 使用 .NET 4.5 async,await 将 Azure blob 异步流式传输到客户端

转载 作者:太空狗 更新时间:2023-10-29 17:58:20 26 4
gpt4 key购买 nike

我正在使用 HttpTaskAsyncHandler 实现我自己的异步 HTTP 处理程序,并使用 async 和 wait 来保持其完全异步。

我想将一个 azure 的 blob 直接流式传输到客户端。确实,我可以将客户端重定向到 blob URL 并让他们直接下载,但假设我不想这样做(例如,我的 blob 是私有(private)的)。

这是我当前的实现:

代码:

    public async Task<bool> DownloadToStreamAsync(ICloudBlob blob, Stream stream)
{
bool blobFound = true;
IAsyncResult asyncResult = blob.BeginDownloadToStream(stream, null, null);
await Task.Factory.FromAsync(asyncResult, (r) =>
{
try
{
blob.EndDownloadToStream(r);
}
catch (StorageException)
{
blobFound = false;
}
});
return blobFound;
}

用法:

    public override async Task ProcessRequestAsync(HttpContext context)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageAccountConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("container1");
CloudBlockBlob blockBlob = container.GetBlockBlobReference("blob1.txt");

await DownloadToStreamAsync(blockBlob, context.Response.OutputStream);
}

这段代码确实是完全异步的,并且会在流式传输发生时释放我的 HTTP 服务器来处理其他客户端吗? (即如果我有一个服务器线程)

是否可以保持 blob 压缩 (GZIP) 并让客户端使用 Content-Encoding: gzip 缩小它们?

更新:(从 Storage 2.1.0.0 RC 开始)

现在原生支持异步。

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageAccountConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("container1");
CloudBlockBlob blockBlob = container.GetBlockBlobReference("blob1.txt");

await blockBlob.DownloadToStreamAsync(context.Response.OutputStream);

最佳答案

您当前的解决方案是异步的,并且将释放服务器请求线程。请参阅my answer to your other question有关建议 TaskFactory.FromAsync

Is it possible to keep the blobs compressed (GZIP) and have the client deflate them using Content-Encoding: gzip?

我不知道。这是一个有趣的问题;您可能想将其作为单独的问题发布。

关于c# - 使用 .NET 4.5 async,await 将 Azure blob 异步流式传输到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18218786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com