请帮我理解这一点。我有这段代码:
if (Entries == null)
{
ExecuteAsync(Report);
}
if (Entries == null)
{
RaisError("No entries!");
return;
}
我的问题是执行从第一个if开始,发现它是真的,执行代码块并退出,条目仍然等于null,因此执行第二个代码块。这些是ExecuteAsync和Report方法:
public async void ExecuteAsync(Action executeAction, Action callbackAction = null)
{
try
{
await Task.Run(executeAction);
if (callbackAction != null)
await Task.Run(callbackAction);
}
catch (Exception exception)
{
ModernDialog.ShowMessage(exception.Message, "Error", MessageBoxButtonOk);
}
}
private void Report()
{
Entries = DataAccessLayer.BrandReport(SelectedBrand, SelectedModel, FromDate, ToDate).ToList();
TotalAmount = Entries.Sum(a => a.Amount);
TotalQuantity = Entries.Sum(q => q.Quantity);
}
虽然我正在调用.ToList,但我仍然在条目中获取null !!!!
答案 0 :(得分:1)
好吧,您正在异步执行Report
,然后您在没有对Task
返回的ExecuteAsync
执行任何操作的情况下向前跳到第二个if块。按理说,在if
被评估并分配给DataAccessLayer.Brand...
之前,您的第二个Entries
可能会被点击。
如果您想在评估第二个Report
之前等待Entries == null
完成,请同步调用它(即没有ExecuteAsync
),或使用Wait
方法在Task
返回的ExecuteAsync
上。