gpt4 book ai didi

c# - 我应该等待 ValueTask 吗?

转载 作者:行者123 更新时间:2023-11-30 13:10:15 28 4
gpt4 key购买 nike

请问哪个是 ValueTask 的有效实现?缓存服务从缓存或数据库返回数据。

public async ValueTask<IList<HrEmploymentDataCustom>> GetEmployeesFacts()
{
try
{
var facts = (List<HrEmploymentDataCustom>) _memoryCache.Get("facts");
return facts ?? await _accountService.GetEmploymentFacts(DetailsRequestType.All, null);
}
catch (Exception e)
{
var tc = new TelemetryClient();
tc.TrackException(e);
return null;
}
}

这会是:var employeesFacts = await _cacheService.GetEmployeesFacts();

var employeesFacts = _cacheService.GetEmployeesFacts().Result;

这里有点困惑。

最佳答案

Would this be:

var employeesFacts = await _cacheService.GetEmployeesFacts();

通常是。

or

var employeesFacts = _cacheService.GetEmployeesFacts().Result;

Little bit confused here.

从来没有。

让我们为您解惑。

首先:值任务只是一个通过值而不是引用来复制的任务。 不要使用 ValueTask,除非您知道其中的区别并且有理由这样做,这是由表明常规任务对收集压力有很大影响的实证性能研究驱动的。几乎一直使用常规任务。

您不会根据任务是按值还是按引用复制来更改您使用任务的方式。无论如何,您都在等待任务。

永远不要在任务上使用 .Result,无论它是值还是引用。为什么?因为假设任务未完成:那么 Result 将同步等待其完成。 假设工作流的最后一步当前在当前线程的队列中等待调度。你只是让那个线程休眠!现在线程正在休眠,等待自己 将其唤醒,因此它将永远休眠。永远不要使用 .Result。这几乎总是错误的做法。

关于c# - 我应该等待 ValueTask<T> 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52425028/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com