终止/中止/停止使用Task.Factory.StartNew()创建的任务

本文关键字:StartNew 任务 Factory 创建 Task 中止 终止 | 更新日期: 2024-05-25 14:13:38

我遇到的情况是,我必须使用为google驱动器创建的Async方法(我没有创建该方法,我只是使用API),该方法无法识别或响应传入的CancelationToken。

注意:这与阻塞主UI无关。这里的情况并非如此。正如我上面所说,这是一个ASYNC方法!这是关于不让任务变成红色和下落不明。这是关于杀死那些不会去任何地方并且在后台运行的死任务

正因为如此(尽管我不喜欢强行杀死线程/进程),但当超时时,我将被迫手动杀死它。

Async方法返回一个Task<>被创造出来。那么,对于这项任务,我该如何强行杀死它呢?我需要先获取PID吗?

更新:

根据流行需求,这里有一个如何创建任务的示例。。。

private void TryToAuthenticate()
{
  //Cancel the task BEFORE it starts works fine
  //m_cancelTokSrc.Cancel();
  //Start task
  Task<UserCredential> task = GoogleWebAuthorizationBroker.AuthorizeAsync(
    GoogleClientSecrets.Load(stream).Secrets,
    scopes,
    "user",
    m_cancelTokSrc.Token,
    new FileDataStore(m_CredentialFilePath, true))
    .ContinueWith((t) => AuthenticateCompleted(t));
  //Cancel the task AFTER it starts fails and does nothing
  //m_cancelTokSrc.Cancel();
}
private UserCredential AuthenticateCompleted(Task<UserCredential> task)
{
  UserCredential credentials = null;
  switch (task.Status)
  {
    case TaskStatus.Canceled:
      return null;
    case TaskStatus.RanToCompletion:
      credentials = task.Result;
      break;
  }
  return credentials;
}

终止/中止/停止使用Task.Factory.StartNew()创建的任务

您不能杀死它。您需要以这样的方式编写代码,即使API方法仍在运行,执行仍将继续。例如,你可以说await Task.WhenAny(apiTask, cancellationToken)