您如何立即取消Firebase存储上传任务?

时间:2019-06-19 21:44:32

标签: c# firebase unity3d firebase-storage

问题是我想知道如何立即取消FirebaseStorage UploadTask。

我已阅读https://firebase.google.com/docs/storage/unity/upload-files,但没有有关如何取消UploadTask的示例。

// Data in memory
var custom_bytes = new byte[] { ... };

// Create a reference to the file you want to upload
Firebase.Storage.StorageReference rivers_ref = storage_ref.Child("images/rivers.jpg");

// Upload the file to the path "images/rivers.jpg"
rivers_ref.PutBytesAsync(custom_bytes)
  .ContinueWith ((Task<StorageMetadata> task) => {
    if (task.IsFaulted || task.IsCanceled) {
        Debug.Log(task.Exception.ToString());
        // Uh-oh, an error occurred!
    } else {
        // Metadata contains file metadata such as size, content-type, and download URL.
        Firebase.Storage.StorageMetadata metadata = task.Result;
        string download_url = metadata.DownloadUrl.ToString();
        Debug.Log("Finished uploading...");
        Debug.Log("download url = " + download_url);
    }
});

1 个答案:

答案 0 :(得分:2)

PutBytesAsync()方法返回一个System.Task<T>,它们本身支持取消。我建议您阅读Task Cancellation Documentation,因为有一些警告:

  

成功取消涉及请求代码调用   CancellationTokenSource.Cancel方法和用户委托   及时终止操作。您可以终止   使用以下选项之一进行操作:

     
      
  • 只需从委托返回即可。在许多情况下,这是   足够;但是,以这种方式取消的任务实例   过渡到TaskStatus.RanToCompletion状态,而不是   TaskStatus。取消状态。

  •   
  • 通过抛出OperationCanceledException并将令牌传递给它   要求取消的订单。首选的方法是   使用ThrowIfCancellationRequested方法。被取消的任务   这样,转换为Canceled状态,调用代码   可以用来验证任务是否响应了其取消请求。

  •