private void Download2Completed(DownloadCompletedEventArgs args, State state) { if (args.Error != null) { lock (state) { if (state.IsCompleted) { return; } state.IsCompleted = true; } DownloadAndSaveCompleted?.Invoke(this, new AsyncCompletedEventArgs(args.Error, false, null)); return; } bool readyToWrite; lock (state) { state.Data2 = args.Data; state.HasData2 = true; readyToWrite = state.HasData1 && state.HasData2; } if (readyToWrite) { SaveResults(state); } }
private void SaveResults(State state) { _saveToDatabase.SaveCompleted += (_, args) => { DownloadAndSaveCompleted?.Invoke(this, args); }; _saveToDatabase.SaveAsync(state.Data1 + state.Data2); }
public void DownloadAndSaveAsync() { _downloadFromInternet.DownloadCompleted += (_, args) => { if (args.Error != null) { DownloadAndSaveCompleted?.Invoke(this, new AsyncCompletedEventArgs(args.Error, false, null)); return; } var data = args.Data; _saveToDatabase.SaveCompleted += (_, args) => { DownloadAndSaveCompleted?.Invoke(this, new AsyncCompletedEventArgs(args.Error, false, null)); }; _saveToDatabase.SaveAsync(data); }; _downloadFromInternet.DownloadAsync(); }