【问题标题】:How to allow an async task to run for a given amount of seconds?如何允许异步任务运行给定的秒数?
【发布时间】:2022-11-18 18:48:07
【问题描述】:

所以我创建了一个任务处理程序。我想让它运行一段预定的保证时间,然后我想做一些我的事情,然后才需要等待处理程序的结果。就像是:

var th = TaskCreator();
th.awaitFor(5000);
//do some work
var result = await th;

那么异步任务如何运行给定的秒数呢?

【问题讨论】:

    标签: c# async-await task


    【解决方案1】:

    你可以使用WhenAny

    var th = TaskCreator();
    await Task.WhenAny(Task.Delay(TimeSpan.FromSeconds(5)), th);
    //do some work
    var result = await th;
    

    这将在其中一个任务完成时停止等待,这意味着您可以进行其他工作,并在最后重新等待 th 以等待其完成(或者如果已经完成则只获取结果)。

    如果您的 TaskCreator 方法在到达第一个 await 之前做了很多同步工作,您可能希望在使用上述代码之前先在 TaskCreator 方法中调用 await Task.Yield(); (docs)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-07
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2018-09-12
      相关资源
      最近更新 更多