Amazon S3:BeginUpload()vs使用Upload()的新线程

时间:2013-05-21 14:08:44

标签: .net amazon-s3

我正在使用Amazon S3 Transfer Utility(适用于.Net)。目前,我正在使用.BeginUpload()函数创建一个异步线程来上传文件,同时我的主线程继续处理。

我遇到了一个问题,然而,TransferUtility偶尔会抛出错误,取消上传。它似乎也会偶尔完全中止(没有记录任何log4net异常)。

因此,我正在重新考虑我用于使上传异步的方法。我看到两个选择:

  • BeginUpload(),获取IAsyncResult,启动一个立即调用的新线程.EndUpload(result)
  • 生成一个直接调用.Upload的新线程(而不是.BeginUpload())。

我的问题:

如果我开始一个新线程来上传队列,那么它的工作方式与.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”中。)

0 个答案:

没有答案