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 吗?

最佳答案

您可以像这样显式编写值任务

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

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

相关文章:

c# - 在 asp.net mvc3 中使用 JsonResult 操作的用例是什么?

c# - 进行托管到 native 互操作时操作系统加载器锁定

javascript - Node - Async for Loop 不等待导致 Mongo 过早断开连接

c# - TPL 与多线程

c# - 如何查找导致.NET方法导致工作人员停止的原因

c# - Zeromq - bytearray(来自.net服务器)到java中的字符串

c# - Entity Framework 中导航属性延迟加载的逻辑

c# - F# 中的 ConfigureAwait(false)

javascript - Express 中间件中的异步/等待

task-parallel-library - TPL数据流中保证交付的BroadcastBlock