【问题标题】:Aborting awaited task中止等待的任务
【发布时间】:2013-08-21 23:51:57
【问题描述】:

我的 FolderViewModel 中有 LoadData 方法,该方法在页面 (FolderPage) 导航到时调用。 (我在 OnNavigatedTo 事件处理程序上等待下面介绍的方法)

public async Task LoadData(Folder folderToLoad)
{
    if (folderToLoad != null)
    {
        FolderName = folderToLoad.Name;
        this.Photographies = await this.dataService.Load(folderToLoad);
    }
}

如果用户进入页面并立即离开,LoadData 仍然会获取数据,直到完成。当我离开此页面时,我想停止 LoadData 任务。有可能吗?

【问题讨论】:

  • 这是 WPF、ASP.NET、MVC 还是别的什么?
  • 它是 WinRT 应用程序。
  • data.Service.Load 支持取消吗?
  • uhm dataService 是我自己的实现(.Load( ) 返回 Task>)- 是否可以使用取消对任务进行编码?

标签: c# windows-runtime async-await


【解决方案1】:

你想implement cancellation in your task-based asynchronous pattern (TAP) method

通常,这意味着您采用 CancellationToken 并将其传递给任何其他采用取消令牌的 TAP 方法。

【讨论】:

  • 不支持 CancellationToken 的任务(例如 SQLite-net 库)怎么样? Task.Run() 可能是解决方案,但我想它会创建新线程,所以在某些情况下我需要锁、调度程序到 ui 线程等。(我不确定我是否完全理解异步模式)
  • 无法取消不可取消的任务(Task.Run 不是解决方案)。如果 SQLite 不支持取消,那么您必须让命令运行完成。
猜你喜欢
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多