我想在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;
};
};
}
但是在这里我没有得到如何在重试时向用户发回响应。这是正确的方式还是其他任何方式。请建议
答案 0 :(得分:3)
OperationContext
类有一个名为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);