【发布时间】:2022-11-18 18:48:07
【问题描述】:
所以我创建了一个任务处理程序。我想让它运行一段预定的保证时间,然后我想做一些我的事情,然后才需要等待处理程序的结果。就像是:
var th = TaskCreator();
th.awaitFor(5000);
//do some work
var result = await th;
那么异步任务如何运行给定的秒数呢?
【问题讨论】:
标签: c# async-await task
所以我创建了一个任务处理程序。我想让它运行一段预定的保证时间,然后我想做一些我的事情,然后才需要等待处理程序的结果。就像是:
var th = TaskCreator();
th.awaitFor(5000);
//do some work
var result = await th;
那么异步任务如何运行给定的秒数呢?
【问题讨论】:
标签: c# async-await task
你可以使用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)。
【讨论】: