有没有一种方法可以取消StorageFile.CopyAsync()?

5
在Win8中,我使用一些file.CopyAsync(destFolder, newName)来复制文件。但是当我尝试取消时,似乎无法正常工作。 以下是我尝试取消的两种方法:
  1. just use 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. use AsTask(CancellationToken)

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

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

1个回答

0

你尝试过这个吗...

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

在我的简单测试中它可以工作。

如果你想使用取消令牌,这段代码也应该可以工作。

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);

谢谢回复,但是使用 CancellationToken 的第二种方法不起作用,我在 token.register 区域中放置了 task.AsAsyncAction().Cancel(),但是复制操作仍然完成了,太奇怪了。 - seanhc
1
如果我在底部添加await task,第一种方法也不起作用。 - seanhc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接