我对异步C#有些新意,我正在处理一个Awaiter
但没有Task
的类。 (这是Unity 3D的WWW
课程,我正在使用these extension classes来提供WWW.GetAwaiter()
。)
我想对await
施加超时,之后我会继续使用函数的逻辑,采用不同的代码路径,因为我知道awaiter花了太长时间。直观的解决方案是:
Task timeout = Task.Delay(20*1000);
await Task.WhenAny(wwwTask, timeout);
bool timedOut = !wwwTask.IsCompleted;
由于WWW
是一个自定义类(使用GetAwaiter()
)而不是任务,我需要为此创建一个任务。是否正确使用辅助函数来获取该对象的任务?
private async Task<WWW> SendRequestAsync(WWW www)
{
return await www;
}
要完成任务:
Task wwwTask = SendRequestAsync(www);
这个超时逻辑是否合理,当只有awaiter时,它是使用Tasks的最简单方法吗?
答案 0 :(得分:1)
要返回使用泛型更改代码的任务:
private async Task<WWW> SendRequestAsync(WWW www)
{
return await www;
}
到
private async Task<WWW> SendRequestAsync(WWW www)
{
return Task.FromResult(www);
}