szi*_*szu 3 c# asp.net-core c#-7.0
哪个是ValueTask的有效实现?缓存服务从缓存或DB返回数据.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这会是: var employeesFacts = await _cacheService.GetEmployeesFacts();
要么 var employeesFacts = _cacheService.GetEmployeesFacts().Result;
这里有点困惑.
Eri*_*ert 20
这会是:
var employeesFacts = await _cacheService.GetEmployeesFacts();
Run Code Online (Sandbox Code Playgroud)
通常是的.
要么
var employeesFacts = _cacheService.GetEmployeesFacts().Result;
Run Code Online (Sandbox Code Playgroud)
这里有点困惑.
永远不能.
让我们不相信你.
第一:值任务只是一个由值而不是引用复制的任务.不要使用ValueTask,除非您知道差异,并且有理由这样做,这表明经常性能研究表明常规任务是收集压力的一个重要因素.几乎所有时间都只使用常规任务.
您不会根据是按值还是按引用复制任务来更改任务的使用方式.无论如何,你等待任务.
您永远不会.Result在任务上使用它,无论它是值还是引用.为什么?因为假设任务未完成:然后Result将同步等待其完成.假设工作流的最后一步当前在等待调度的当前线程的队列中.你只是让那个线程入睡!现在线程正在休眠,等待自己将其唤醒,因此它将永远睡眠.切勿使用.Result.几乎总是这样做是错误的.
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |