Tôi đang triển khai trình xử lý HTTP không đồng bộ của riêng mình với HttpTaskAsyncHandler
và sử dụng async & đang chờ để giữ nó hoàn toàn không đồng bộ.Truyền một blob Azure tới máy khách không đồng bộ với .NET 4.5 async, chờ
Tôi muốn phát trực tiếp một đốm màu xanh dương trực tiếp cho khách hàng. Đúng là tôi có thể chuyển hướng máy khách đến URL blob và yêu cầu họ tải nó trực tiếp, nhưng giả sử tôi không muốn làm điều đó (ví dụ blob của tôi là riêng tư).
Đây là thực hiện hiện tại của tôi:
Code:
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;
}
Cách sử dụng:
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);
}
Là mã này thực sự hoàn toàn không đồng bộ và sẽ giải phóng máy chủ HTTP của tôi để xử lý khách hàng khác trong khi phát trực tuyến diễn ra? (ví dụ: nếu tôi có một luồng máy chủ duy nhất)
Có thể giữ cho các đốm màu được nén (GZIP) và yêu cầu khách hàng làm giảm chúng bằng cách sử dụng Content-Encoding: gzip
không?
Cập nhật: (tính lưu trữ 2.1.0.0 RC)
Async hiện được hỗ trợ natively.
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);
WindowsAzure.Storage 2.1.0.0-rc hiện hỗ trợ async nguyên bản - http://www.nuget.org/packages/WindowsAzure.Storage –