c# - 有没有办法取消 StorageFile.CopyAsync()?

标签 c# windows-runtime async-await

在 Win8 中,我使用 somefile.CopyAsync(destFolder, newName) 来复制文件。但是当我尝试取消它时,它似乎不起作用。 这两种方法是我尝试取消它的方式:

  1. 只需使用 IAsyncOperation.Cancel

    var op = somefile.CopyAsync(destFoder, newName);
    op.Cancel();
    op.Complete = (x,y) =>
    {
        switch(y) {
            case AsyncStatus.Complete:
                Debug.WriteLine("Completed" + x.GetResults().Name);
                break;
            case AsyncStatus.Cancel:
                Debug.WriteLine("Canceled")
                break;
        }
    }
    
  2. 使用 AsTask(CancellationToken)

    var cts = new CancellationTokenSource();
    cts.CancelAfter(TimeSpan.FromSeconds(1));
    var op = somefile.CopyAsync(destFolder, newName).AsTask(cts.Token);
    await op;
    

在第一种方法中,没有调用 AsyncStatus.Cancel 的情况,在第二种方法中,也没有任何反应。还有其他方法可以尝试吗?谢谢!

最佳答案

你试过这个吗...

var task = file.CopyAsync(KnownFolders.DocumentsLibrary, "test").AsTask();
task.AsAsyncAction().Cancel();

它在我的简单测试中有效。

如果您想使用取消 token ,此代码也应该有效

var source = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
var token = source.Token;
token.Register(() => { Debug.WriteLine("Your cancellation code here"); });
var task = file.CopyAsync(KnownFolders.DocumentsLibrary, "test").AsTask(token);

关于c# - 有没有办法取消 StorageFile.CopyAsync()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12154397/

相关文章:

c# - 正则表达式 - 按 "_"分割并排除文件扩展名

c# - 从 App WinRT 获取本地文件夹

windows-phone-8 - Windows Phone 8.1 WebView 中的消息对话框 "Search for app in the Store?"是什么

c# - 为 Windows 8 XAML 应用设置 UIElement 的位置

c# - 说丢弃任务的非异步方法位于异步等待链的 "top"是否正确?

c# - 如何利用无状态框架

停靠工具窗口的 C# .NET 控件?

c# - linq - 从选择

c# - 无法从 Task<> 隐式转换类型

for 循环中的 JavaScript 异步/等待