【发布时间】:2018-08-31 05:54:43
【问题描述】:
我有这个代码:
var task = Task.Factory.StartNew(() => service.StartAsync(ct), ct);
但我想知道是否应该改为:
var task = Task.Factory.StartNew(async () => await service.StartAsync(ct), ct).Unwrap();
第一个启动我的异步服务是否正确?还是第二个更好?
【问题讨论】:
-
与其创建一个任务,将其包装在另一个任务中,将其解包在另一个任务中,再将其包装在一个任务中,然后再次将其解包在一个任务中,为什么不干脆不包装首先在另一个任务中完成任务?只需写
var task = service.StartAsync(ct);,因为该操作已经是异步的。 -
任务task = service.StartAsync(ct);阻塞直到服务完成,这不是期望的行为。
-
不,它没有。它是异步的。这就是为什么它的名称中有
Async并返回Task。如果它不是异步的,则不应返回Task并且名称中不应包含Async,或者它有一个需要修复以使其异步的错误。
标签: c# async-await task-parallel-library