如何实现 blob 存储访问超时和显示消息
How to implement blob storage access timeout and show message
我想在 blob 上传和下载花费大量时间时向最终用户显示消息。我找到了有用的博客 here。
简单的线性重试策略
public static RetryPolicy LinearRetry(int retryCount, TimeSpan intervalBetweenRetries)
{
return () =>
{
return (int currentRetryCount, Exception lastException, out TimeSpan retryInterval) =>
{
// Do custom work here
// Set backoff
retryInterval = intervalBetweenRetries;
// Decide if we should retry, return bool
return currentRetryCount < retryCount;
};
};
}
但在这里我没有得到如何在重试时将响应发送回用户。这是正确的方法还是其他任何方法。请推荐
OperationContext
class in Storage Client Library has an event called Retrying
您可以使用并将消息发送回客户端。
例如,我创建了一个简单的控制台应用程序,它试图创建一个 blob 容器。当我 运行 这个应用程序时,我特意关闭了 Internet 访问,以便我可以模拟重试操作的情况。然后在这个事件消费者中,我简单地写回控制台。您可以简单地从那里引发另一个事件,将消息发送回您的客户。
var requestOptions = new BlobRequestOptions()
{
RetryPolicy = new ExponentialRetry(),
};
var operationContext = new OperationContext();
operationContext.Retrying += (sender, args) =>
{
Console.WriteLine("I'm retrying ....");
};
var cloudStorageAccount = new CloudStorageAccount(new StorageCredentials(accountName, accountKey), true);
var blobClient = cloudStorageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("test");
container.CreateIfNotExists(requestOptions, operationContext);
我想在 blob 上传和下载花费大量时间时向最终用户显示消息。我找到了有用的博客 here。
简单的线性重试策略
public static RetryPolicy LinearRetry(int retryCount, TimeSpan intervalBetweenRetries)
{
return () =>
{
return (int currentRetryCount, Exception lastException, out TimeSpan retryInterval) =>
{
// Do custom work here
// Set backoff
retryInterval = intervalBetweenRetries;
// Decide if we should retry, return bool
return currentRetryCount < retryCount;
};
};
}
但在这里我没有得到如何在重试时将响应发送回用户。这是正确的方法还是其他任何方法。请推荐
OperationContext
class in Storage Client Library has an event called Retrying
您可以使用并将消息发送回客户端。
例如,我创建了一个简单的控制台应用程序,它试图创建一个 blob 容器。当我 运行 这个应用程序时,我特意关闭了 Internet 访问,以便我可以模拟重试操作的情况。然后在这个事件消费者中,我简单地写回控制台。您可以简单地从那里引发另一个事件,将消息发送回您的客户。
var requestOptions = new BlobRequestOptions()
{
RetryPolicy = new ExponentialRetry(),
};
var operationContext = new OperationContext();
operationContext.Retrying += (sender, args) =>
{
Console.WriteLine("I'm retrying ....");
};
var cloudStorageAccount = new CloudStorageAccount(new StorageCredentials(accountName, accountKey), true);
var blobClient = cloudStorageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("test");
container.CreateIfNotExists(requestOptions, operationContext);