我想在游戏引擎的环境中使用异步/等待,在这种情况下,高帧率非常重要,应避免垃圾收集暂停。惯用的异步/等待似乎严重依赖堆分配。我该如何减少呢?
Task<T>s
在堆上分配,等待似乎导致分配,并且通过CancellationToken.ThrowIfCancellationRequested
取消任务会生成较大的堆栈跟踪。实际上,it appears不能在没有分配异常和堆栈跟踪的情况下取消任务。
我可以像这样实现任务取消,但是不使用IsCancelled似乎很直观。
public async Task<T> Method<T>(CancellationToken cancellationToken)
{
// Do not do this as it could cause a TaskCanceledException
//await Task.Delay(1000, cancellationToken);
await Task.Delay(1000);
if (cancellationToken.IsCancellationRequested)
{
//perhaps return null to show a cancellation?
return default;
}
//uncancelled work...
}
是否有更惯用的方式做到这一点?