我有一个try / catch方法,如下所示。当互联网连接断开时,代码会在try中阻塞,并且不会进入catch,并且应用程序会停止响应。当互联网连接恢复时,问题就消失了,一切正常。
这是我的代码的一部分:
using (var fileStream = System.IO.File.OpenRead(strLocatie))
{
try
{
blobSAS.UploadFromStream(fileStream);
}
catch
{
}
}
我可以设置超时,以便当try块超过1000毫秒时,代码会自动转到catch吗?
整个方法:
public void uploadImages(string strLocatie, string naamBestand, string directoryname)
{
try
{
string dag = DateTime.Now.Day.ToString();
if (dag.Length == 1)
{
string temp = dag;
dag = "0" + temp;
}
string maand = DateTime.Now.Month.ToString();
if (maand.Length == 1)
{
string temp = maand;
maand = "0" + temp;
}
if (signature == null)
{
getKey();
}
string datum = dag + "-" + maand + "-" + DateTime.Now.Year.ToString();
CloudBlobClient blobClient = new CloudBlobClient(sUrl, new StorageCredentialsSharedAccessSignature(signature));
CloudBlobContainer blobContainer = blobClient.GetContainerReference(container1);
blobContainer.GetDirectoryReference(sUrl + container1);
CloudBlockBlob blobSAS = new CloudBlockBlob(sUrl + container1 + "/" + directoryname + "/" + datum + "/" + naamBestand,
new StorageCredentialsSharedAccessSignature(signature));
using (var fileStream = System.IO.File.OpenRead(strLocatie))
{
try
{
blobSAS.UploadFromStream(fileStream);
}
catch
{
}
}
File.Delete(strLocatie);
}
catch
{
}
}
如果互联网连接已全部关闭,那么在启动应用程序之前,捕获工作正常......
答案 0 :(得分:2)
您可以在blobClient上设置超时
var storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=<YOURACCOUNTNAME>;AccountKey=<YOURACCOUNTKEY>");
_blobClient = storageAccount.CreateCloudBlobClient();
_blobClient.Timeout = new System.TimeSpan(1,0,0);
然后,您还可以设置并行设置,以便将副本分布在多个线程中。如果你有大带宽,你可以增加下面的线程数,因为Azure接受以任何到达顺序分成块的blob。
_blobClient.ParallelOperationThreadCount = 2;
答案 1 :(得分:1)
您可以在与CloudBlobClient
相关联的CloudBlockBlob
上为请求指定Timeout。默认值为90秒。
CloudBlockBlob提供属性ServiceClient
来访问CloudBlobClient的实例
但我不确定这是否能解决你的问题。
您还可以尝试使用BackgroundWorker将流上传到云端,以便您的应用程序负责并在后台上传数据。
类CloudBlockBlob也提供方法BeginUploadFromStream和EndUploadFromStream来异步上传数据。
答案 2 :(得分:1)
您必须设置CloudBlockBlob的blobrequestoptions。在这里你可以设置超时。但是,最好在后台工作程序中上传文件。这样,您的应用程序始终具有响应性。
答案 3 :(得分:1)
UploadFromStream
重载调用中有timeout property in the BlobRequestOption
个。
是否可以指定超时,例如:
BlobRequestOptions blobRequestOptions = new BlobRequestOptions();
blobRequestOptions.Timeout = TimeSpan.FromSeconds(20.0)
blobSAS.UploadFromStream(fileStream, blobRequestOptions);