【发布时间】:2013-07-21 16:54:10
【问题描述】:
我正在创建一个任务调度程序,因此我正在尝试制作某种接受任务并等待它的重复函数,但我得到了一个奇怪的 Type 'T' is not awaitable 异常
public static Task<T> Interval<T>(TimeSpan pollInterval, Func<T> action, CancellationToken token)
{
return Task.Factory.StartNew(
async () =>
{
for (; ; )
{
if (token.WaitCancellationRequested(pollInterval))
break;
await action();
}
}, token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
}
那么谁能告诉我我如何等待一个通用任务因为我希望函数接受任何任务、任务、布尔或任何其他类型?
【问题讨论】:
-
为什么
Interval返回Task<T>?它永远不会结束(它只会永远持续下去,直到出现异常或错误),并且它永远不会将T值设置为结果。 -
@Servy 没有我有一个取消令牌
-
是的,如果它被取消,那么任务将被设置为取消状态。它仍然没有结果。它在某个时候完成,但它从来没有您可以获取的
Result。我的意思是你应该返回一个Task,而不是Task<T>,你应该接受Action而不是Func<T>,因为你丢弃了函数的结果。 -
@Servy :我很抱歉,但我不明白你的想法;但是,如果您理解我的问题。我想要实现的是我希望函数接受任何类型的 Task
、int 或 bool 或任何任何类型......这可以实现吗?或者我怎么能绕过 -
请注意,您的函数在延迟期间浪费了一个线程。您应该改用
await Task.Delay():msdn.microsoft.com/en-us/library/hh194845.aspx
标签: c# task-parallel-library task async-await