【问题标题】:Get reference of continuewith task when using Task.Run使用 Task.Run 时获取 continuewith 任务的参考
【发布时间】:2017-06-18 01:45:51
【问题描述】:

假设我有

Task t1 = Task.Run(() =>
{
    // do something
}).ContinueWith((t) => {
    int x;
});

我认为 t1 是 ContinuteWith 任务的引用。我怎样才能得到第一个任务的参考?有可能吗?

是否有快捷方式,或者我必须使用 new 创建任务,然后单独附加 continuewith?

【问题讨论】:

  • 您似乎在问题标题和问题文本中提出了不同的问题...
  • 来吧,你知道我的意思。如何获得其他参考?

标签: c# task-parallel-library


【解决方案1】:

正如@toddmo 所提到的,要获得主要Task 的两个引用并继续,您可能希望执行以下操作:

Task t1 = Task.Run(() => {
    // do something
});
Task t1Continuation = t1.ContinueWith((t) => {
    int x;
});

AFAIK 没有便捷的方法可以以单行方式实现此目的。另外,请记住,在 ContinueWith lambda 中收到的对象是第一个任务,您可以在其中检查它是 results 或者是否有 errors

【讨论】:

  • 在我定义 t1Continuation 之前,t1 可能已经完成,这难道不是问题吗?如果是这样,t1Continuation 还会运行吗?
  • 是的,你是对的,t1 可以在t1.ContinueWith 调用之前完成,但请记住 ContinueWith 会检查 Task 是否已经完成。如果是,那么runs the method provided immediately。所以,无论第一个Task是否完成,你仍然可以调用t1.ContinueWith
【解决方案2】:

单独声明t1

将第一条腿放在括号中。去掉开头的“任务”

将整个事情分配给 t2

【讨论】:

    猜你喜欢
    • 2019-07-15
    • 2011-10-05
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    相关资源
    最近更新 更多