为了账号安全,请及时绑定邮箱和手机立即绑定

了解 Task 与 Task<T> 作为返回类型

了解 Task 与 Task<T> 作为返回类型

C#
九州编程 2023-08-20 14:40:06
如果这个问题已经在某个地方得到解决,我深表歉意,但有关该主题的资源数量相当庞大。我编写了以下等待异步调用的方法public async Task GetAllObjectsNames(string bucketName){    if (string.IsNullOrEmpty(bucketName))    {        throw new ArgumentNullException(nameof(bucketName), "bucket name can't be null or empty string");    }    var request = new ListObjectsRequest    {        BucketName = bucketName    };    await  s_client.ListObjectsAsync(request);}致力于解决返回 aTask和返回 a之间的区别Task<T>public async Task<IEnumerable<string>> GetAllObjectsNames(string bucketName){    if (string.IsNullOrEmpty(bucketName))    {        throw new ArgumentNullException(nameof(bucketName), "bucket name can't be null or empty string");    }    var request = new ListObjectsRequest    {        BucketName = bucketName    };    var response = await s_client.ListObjectsAsync(request);    return response.S3Objects.Select(o => o.Key);}有人可以插话吗?
查看完整描述

2 回答

?
慕无忌1623718

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>。


查看完整回答
反对 回复 2023-08-20
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

System.Threading.Tasks.Task<TResult>表示可以返回值(类型为 TResult)的异步操作。

(如果有帮助,这类似于System.Func<…, TResult>,它基本上是一个返回值的操作)。

System.Threading.Tasks.Task表示异步操作(不返回值)。

(同样,这类似于System.Action<…>。)


查看完整回答
反对 回复 2023-08-20
  • 2 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信