我有一个由后台操作设置的类属性。这是我读取该属性值的方法。这个想法是在返回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方法。原因是
_entity
在第一次拍摄时会有一个不同的值。答案 0 :(得分:0)
你的方法不可靠。
您应该等待Charge - Amount paid in
方法中的entityManager.GetEntityAsync()
方法:
GetEntityAsync()
答案 1 :(得分:0)
定义你的_entity,如:
TaskCompletionSource<Entity> _entity = _new TaskCompletionSource<Entity>();
并在第3天像这样设置。派对活动:
_entity.TrySetResult(xxxx);
然后像这样使用它:
public async Task<Entity> GetEntityAsync()
{
Entity result = await _entity.Task;
_entity = _new TaskCompletionSource<Entity>();
return result;
}
答案 2 :(得分:0)
您说您的数据源使用事件来返回<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
。事件很容易连接到_entity
。考虑:
TaskCompletionSource
现在你有一个很好的小异步方法连接到你的数据源事件。
当然,这只是一个非常简单的例子,可以做出很多假设,没有错误处理等等,但它应该会让你找到一个好的解决方案。如果您有事件,则无需轮询:)