c# - 可以在没有大量堆分配的情况下使用 C# async/await 吗?
问题描述
我想在高帧率很重要并且应该避免垃圾收集停止的游戏引擎的上下文中使用 async/await。惯用的 async/await 似乎严重依赖堆分配。我怎样才能减少这种情况?
Task<T>s
在堆上分配,等待似乎导致分配,并且通过CancellationToken.ThrowIfCancellationRequested
生成大型堆栈跟踪取消任务。事实上,似乎没有办法在不分配异常和堆栈跟踪的情况下取消任务。
我可以像这样实现任务取消,但不使用 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...
}
有没有更惯用的方法来做到这一点?
解决方案
推荐阅读
- go - golang如何从字符串中删除最后一个字母?
- python - __add__ 和 + 运算符之间的性能差异
- c# - Word 文档中的 C# 分栏符
- flutter - 如何在 Flutter 中从内部和外部存储中获取所有 mp3 文件?
- keras - 如何在 Keras 摘要中显示所有 LSTM 状态?
- kubernetes - AKS 使用内部终结点进行通信
- azure - 使用 Azure 中的事件代理将使用的数据从第三方 WebHook 流式传输到应用程序
- javascript - Object.prototype.toString 和 toString 有什么区别?
- reactjs - 不使用数组或 setstate 动态创建新组件
- go-cd - 如何修改 GoCD 管道中材料的轮询时间?