c# - 如何选择异步委托(delegate)的返回类型

原文 标签 c# async-await task-parallel-library valuetask

我正在将异步委托(delegate)传递给 LINQ Select方法,我更愿意获得 ValueTask 的列表s 而不是 Task 的列表s。我该怎么做?例子:

var result = (new[] { 0 }).Select(async x => await Task.Yield()).ToArray();
Console.WriteLine($"Result type: {result.GetType()}");

Result type: System.Threading.Tasks.Task[]



这是不可取的。我发现我可以通过用异步方法替换异步委托(delegate)来创建我想要的列表,如下所示:
var result = (new[] { 0 }).Select(DoAsync).ToArray();
Console.WriteLine($"Result type: {result.GetType()}");
async ValueTask DoAsync(int arg)
{
    await Task.Yield();
}

Result type: System.Threading.Tasks.ValueTask[]



这有效,但很尴尬。有什么办法可以保持简洁的委托(delegate)语法,并且仍然得到 ValueTask我要吗?

最佳答案

您可以像这样明确地编写值(value)任务

var result = (new[] { 0 }).Select<int, ValueTask>(async x => await Task.Yield()).ToArray();

关于c# - 如何选择异步委托(delegate)的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59912423/

相关文章:

C# - LINQ Select() 调用函数两次

c# - 取消任务并等待它完成

c# - 如何捕获Lambda表达式内的外部变量的值?

c# - 取消任务中的任务

c# - 如何在Unity3D中通过场景管理器通过loadlevel加载/获取场景变量

c# - 强制框架使用枚举实体名称而不是其值

java - Actionscript中“如果大于,则等于”的简写?

c# - 如何最小起订量 Entity Framework SaveChangesAsync?

c# - 创建异步Web服务方法

c# - 等待/异步问题