2 回答
TA贡献1744条经验 获得超4个赞
Task表示可能正在进行、或者可能已取消、发生故障或已完成的操作。CompletedTask不包含任何类型的结果,它仅表示操作已完成的事实。
Task<T>也表示可能正在进行、或可能已取消、发生故障或可能已完成的操作。但是,已完成的Task<T>将包含该操作的结果,然后您可以读取该结果。
你可以写:
public async Task<IEnumerable<string>> GetAllObjectsNames(string bucketName)
// ...
var objects = await GetAllObjectsNames("Foo");
await GetAllObjectsNames("Foo"); // Throws away the result of the Task
但是你只能写:
public async Task GetAllObjectsNames(string bucketName)
// ...
await GetAllObjectsNames("Foo");
Task此版本的返回值不能GetAllObjectsNames包含结果,因此您只能知道该操作何时完成 - 您无法从中获取结果。
您可以用作方法Task的返回值UploadObject- 您关心上传操作何时完成,但没有结果可供您读取。您可能会使用Task<T>for GetAllObjectsNames,因为该操作的目的是获取一些值供您使用。
void从概念上讲,它与返回(不返回结果)的方法或返回其他任何内容的方法之间的区别相同。Action或者和之间的区别Func<T>。
TA贡献1848条经验 获得超10个赞
System.Threading.Tasks.Task<TResult>
表示可以返回值(类型为 TResult)的异步操作。
(如果有帮助,这类似于System.Func<…, TResult>
,它基本上是一个返回值的操作)。
System.Threading.Tasks.Task
表示异步操作(不返回值)。
(同样,这类似于System.Action<…>
。)
- 2 回答
- 0 关注
- 134 浏览
添加回答
举报