【发布时间】:2016-08-03 18:33:43
【问题描述】:
我有一个由后台操作设置的类属性。这是我读取该属性值的方法。这个想法是在返回 null 之前等待一段合理的时间,因为这意味着仍有工作即将完成
public async Task<Entity> GetEntityAsync()
{
int tries = 0;
while (_entity == null && tries < 2)
{
await Task.Delay(100);
tries++;
}
return _entity;
}
那我就这样用
var entity = await entityManager.GetEntityAsync();
这种方法正确还是有更好的选择?
编辑
设置_entity 的后台操作是通过事件报告数据可用的第三方组件。我想将事件方法转换为 async/await 方法。原因是
- 这种方法在很多地方都使用过(我正在重构),它还没有为面向事件的方法做好准备。
- 面向事件的方法实施起来更加复杂。我只是想确保我不会挂起主线程,99% 的情况下,
_entity在第一次拍摄时会有一个不同于 null 的值。
【问题讨论】:
-
_entity是如何处理的?你在哪里设置它的价值? -
你的属性设置器不能在设置后触发事件吗?此外,如果您等待完成它,它并不是真正的异步
-
@EhsanSajjad:有一个后台线程最终会设置它。主要是想知道那个方法的逻辑有没有bug,对我的async/await技能不是很自信
-
@musefan:不想处理事件,我想调用一个方法并获取值(如果有)
-
@StackOverflower 这个问题无法解释为什么你需要这样做。
标签: c# async-await