问题标签 [valuetask]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
7393 浏览

c# - Task.WhenAll 用于 ValueTask

有没有等价的Task.WhenAll接受ValueTask

我可以使用

如果它们都包装 a 这会很好,Task但它会强制Task为 real 分配一个无用的对象ValueTask

0 投票
2 回答
835 浏览

c# - 价值任务和异步状态机

根据文件ValueTask<TResult>... _

提供包装 aTask<TResult>和 a的值类型TResult,仅使用其中一个。

我的问题是关于 C# 编译器在async遇到关键字时生成的状态机。当结果立即可用时,生成ValueTask<TResult>包装 a 的a 是否足够聪明,或者当结果出现在 a 之后时生成包装 a ?这是一个例子:TResultTask<TResult>await

调用GetNowAsync(false)应该返回一个TResult包装器,因为没有等待,调用GetNowAsync(true)应该返回一个Task<TResult>包装器,因为Task.Delay在结果可用之前等待 a。我担心状态机总是返回Task包装器的可能性,从而抵消了该ValueTask类型的所有优点Task(并保留了所有缺点)。据我所知,该类型的属性ValueTask<TResult>没有提供关于它内部包装的指示。我将上面的代码粘贴到了sharplab.io,但输出也没有帮助我回答这个问题。

0 投票
1 回答
166 浏览

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

我将异步委托传递给 LINQSelect方法,我更愿意获取 s 列表ValueTask而不是Tasks 列表。我该怎么做?例子:

结果类型:System.Threading.Tasks.Task[]

这是不可取的。我发现我可以通过用异步方法替换异步委托来创建我想要的列表,如下所示:

结果类型:System.Threading.Tasks.ValueTask[]

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

0 投票
3 回答
1682 浏览

c# - 从内部等待某些任务的方法返回 ValueTask 是否有任何意义

我有一个大致如下所示的异步方法:

由于数据已经准备好,此方法将在大部分时间同步工作。因此,用 ValueTask 替换返回类型以减少分配看起来是个好主意。但这调用reader.ReadInt32()返回任务。

所以问题是:从内部等待某些任务的方法返回 ValueTask 有什么意义吗?

0 投票
2 回答
2348 浏览

c# - Task.CompletedTask 的 ValueTask 等价物是什么?

我正在实现IAsyncDisposable这需要我返回 a ValueTask,但有时我的 dispose 方法无关。在这种情况下我应该如何返回?

目前我正在返回new ValueTask(Task.CompletedTask),这似乎可行,但由于 valueTasks 的目的是避免创建不必要的堆对象,我相信应该有一种更简单、更有效的方法。

0 投票
1 回答
201 浏览

.net - 转换一个 ValueTask到非通用 ValueTask

这里提出的问题与这里的问题相同,旨在为它创建一个明确的解决方案。最准确的答案是 Stephen Toub 本人在这个问题上正是关于这个问题的。“推荐代码”如下:

这个答案不是最新的 - ValueTask 没有公开 GetResult() (只有 Result 属性) - 问题是:

  • 我们是否需要将 Result 从 ValueTask 中“拉”出来(以“释放”可能在此 ValueTask 下运行的 IValueTaskSource)?
  • 如是:
    • .GetAwaiter()上面缺少的电话吗?
    • 或者是一个假电话保证工作var fake = valueTask.Result;?总是?(我害怕死代码消除。)
  • 如果不是,那么像下面这样的直接实现是否足够(并且是最佳的)?
0 投票
3 回答
689 浏览

c# - ValueTask 有 ContinueWith 吗?

如果 API 返回 a ValueTaskor ValueTask<T>,有没有办法ContinueWith在它上面执行 a ,就像我可以做的那样Task?是否有 Microsoft 提供的 NuGet 库用于使用 .NET Standard 2.0 执行此操作?

0 投票
2 回答
431 浏览

c# - 是否有必要检查 `ValueTask.IsCompleted` 的性能?

  • 情况1:
  • 案例2:

有了case 1以上case 2
谁能说case 2性能更好(cpu,内存等)?
或者,task.IsCompleted只是重复和冗余?

0 投票
0 回答
472 浏览

c# - EF Core DbSet AddAsync 方法:是否应该在 100% 的情况下使用异步方法?

该方法的文档AddAsync指出

此方法是异步的,仅允许特殊值生成器(例如“Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo”使用的值生成器)异步访问数据库。对于所有其他情况,应使用非异步方法。

这是否仍然是最新的,因为该方法确实返回 a ValueTask,因此,以同步方式不应该有更多与任务相关的分配?

更新/后续问题

为什么不AddRangeAsync返回ValueTask文档)?

0 投票
1 回答
214 浏览

c# - 同步方法的 ValueTask

我正在使用并发字典实现一个简单的查找服务来存储数据。由于使用此服务的大多数方法都是异步的,因此我正在考虑使用ValueTask<TResult>.

伪代码:

这种方法是否有意义,是否有任何警告?