问题标签 [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.
c# - Task.WhenAll 用于 ValueTask
有没有等价的Task.WhenAll
接受ValueTask
?
我可以使用
如果它们都包装 a 这会很好,Task
但它会强制Task
为 real 分配一个无用的对象ValueTask
。
c# - 价值任务和异步状态机
根据文件ValueTask<TResult>
... _
提供包装 a
Task<TResult>
和 a的值类型TResult
,仅使用其中一个。
我的问题是关于 C# 编译器在async
遇到关键字时生成的状态机。当结果立即可用时,生成ValueTask<TResult>
包装 a 的a 是否足够聪明,或者当结果出现在 a 之后时生成包装 a ?这是一个例子:TResult
Task<TResult>
await
调用GetNowAsync(false)
应该返回一个TResult
包装器,因为没有等待,调用GetNowAsync(true)
应该返回一个Task<TResult>
包装器,因为Task.Delay
在结果可用之前等待 a。我担心状态机总是返回Task
包装器的可能性,从而抵消了该ValueTask
类型的所有优点Task
(并保留了所有缺点)。据我所知,该类型的属性ValueTask<TResult>
没有提供关于它内部包装的指示。我将上面的代码粘贴到了sharplab.io,但输出也没有帮助我回答这个问题。
c# - 从内部等待某些任务的方法返回 ValueTask 是否有任何意义
我有一个大致如下所示的异步方法:
由于数据已经准备好,此方法将在大部分时间同步工作。因此,用 ValueTask 替换返回类型以减少分配看起来是个好主意。但这调用reader.ReadInt32()
返回任务。
所以问题是:从内部等待某些任务的方法返回 ValueTask 有什么意义吗?
c# - Task.CompletedTask 的 ValueTask 等价物是什么?
我正在实现IAsyncDisposable
这需要我返回 a ValueTask
,但有时我的 dispose 方法无关。在这种情况下我应该如何返回?
目前我正在返回new ValueTask(Task.CompletedTask)
,这似乎可行,但由于 valueTasks 的目的是避免创建不必要的堆对象,我相信应该有一种更简单、更有效的方法。
.net - 转换一个 ValueTask到非通用 ValueTask
这里提出的问题与这里的问题相同,旨在为它创建一个明确的解决方案。最准确的答案是 Stephen Toub 本人在这个问题上正是关于这个问题的。“推荐代码”如下:
这个答案不是最新的 - ValueTask 没有公开 GetResult() (只有 Result 属性) - 问题是:
- 我们是否需要将 Result 从 ValueTask 中“拉”出来(以“释放”可能在此 ValueTask 下运行的 IValueTaskSource)?
- 如是:
- 是
.GetAwaiter()
上面缺少的电话吗? - 或者是一个假电话保证工作
var fake = valueTask.Result;
?总是?(我害怕死代码消除。)
- 是
- 如果不是,那么像下面这样的直接实现是否足够(并且是最佳的)?
c# - ValueTask 有 ContinueWith 吗?
如果 API 返回 a ValueTask
or ValueTask<T>
,有没有办法ContinueWith
在它上面执行 a ,就像我可以做的那样Task
?是否有 Microsoft 提供的 NuGet 库用于使用 .NET Standard 2.0 执行此操作?
c# - 是否有必要检查 `ValueTask.IsCompleted` 的性能?
- 情况1:
- 案例2:
有了case 1
以上case 2
,
谁能说case 2
性能更好(cpu,内存等)?
或者,task.IsCompleted
只是重复和冗余?
c# - 同步方法的 ValueTask
我正在使用并发字典实现一个简单的查找服务来存储数据。由于使用此服务的大多数方法都是异步的,因此我正在考虑使用ValueTask<TResult>
.
伪代码:
这种方法是否有意义,是否有任何警告?