我正在使用Amazon S3 Transfer Utility(适用于.Net)。目前,我正在使用.BeginUpload()函数创建一个异步线程来上传文件,同时我的主线程继续处理。
我遇到了一个问题,然而,TransferUtility偶尔会抛出错误,取消上传。它似乎也会偶尔完全中止(没有记录任何log4net异常)。
因此,我正在重新考虑我用于使上传异步的方法。我看到两个选择:
我的问题:
如果我开始一个新线程来上传队列,那么它的工作方式与.BeginUpload()/。EndUpload()调用的方式相同吗?
换句话说:
IAsyncResult ar = myTransferUtility.BeginUpload(uploadRequest);
ThreadPool.QueueUserWorkItem(c => {
try
{
myTransferUtility.EndUpload(ar);
}
catch (Exception ex)
{
handleException(ex, "Asynch Uploading");
}
});
与
ThreadPool.QueueUserWorkItem(c => {
try
{
myTransferUtility.Upload(uploadRequest);
}
catch (Exception ex)
{
handleException(ex, "Asynch Uploading");
}
});
有什么区别?
(当发生这些罕见的异常/中止时,有一个并不总是被调用的UploadCompleted回调。这个回调是我想要保证发生的。它会在“catch”中。)