考虑这样的代码:如果完全异步,我的任务是否长时间运行?
private static async Task ProcessSomethingAsync()
{
while (true)
{
var message = await GetMessageAsync();
await WriteAsync(message);
}
}
考虑到GetMessageAsync和WriteAsync方法杠杆异步IO。
想象一下,我有几个(从2到N)这样的任务,只要应用程序存在,它就一直存在。 我认为,因为循环内的代码是完全异步的,所以最好不要在启动这样的任务时使用LongRunning选项,以便我们能够利用ThreadPool而不是为每个Task创建线程。
这是正确的还是我错过了什么?
如果这些方法实际上是异步I/O,而不是CPU绑定,那么它们可以在一个线程内生活得很好。当然,如果主线程没有被占用,但即使这样,你也可以在另一个线程中执行所有这些。 – Luaan
'GetMessageAsync()'和/或'WriteAsync()'实际上可以同步完成吗?请记住,如果它们实际上完全同步完成,那么'await'实际上并不代表该线程实际上将被放弃的时间点。 –
@presiuslitelsnoflek同意,术语异步和长时间运行是正交的,但也许我应该改变问题更具体。 – Max