2014-12-28 3 views
0

Пожалуйста, помогите мне понять это. У меня есть этот код:C# Странная последовательность выполнения

if (Entries == null) 
{ 
    ExecuteAsync(Report);     
} 

if (Entries == null) 
{ 
    RaisError("No entries!"); 
    return; 
} 

Моя проблема заключается в том, что выполнение начинается с первого, если находит это верно, выполняет блок кода и выходит с записей по-прежнему равна нулю, и, следовательно, выполняет второй блок кода. Это ExecuteAsync и отчет метода:

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, я до сих пор получить нуль в записях !!!!

ответ

1

Ну, вы выполняете асинхронно Report, а затем вы переходите ко второму, если ничего не делаете с Task, возвращаемым ExecuteAsync. Разумеется, возможно, что ваш второй if будет удален до того, как DataAccessLayer.Brand... был оценен и присвоен Entries.

Если вы хотите ждать Report закончить до второго Entries == null оценивается, либо вызвать его синхронно (т.е. без ExecuteAsync), или использовать Wait метод на Task возвращенное ExecuteAsync.

+0

Идеальный смысл. Благодарю. –

Смежные вопросы