public async void Start() { IsCollecting = true; CurrentId = StartId; cancelSrc = new CancellationTokenSource(); var progress = new Progress <RecipeRecord>((r) => { // データが取得できなかった場合 if (r.Id == 0) { // 画面上のIDだけ更新する。 CurrentId++; return; } // データは取得できたが読み込めない形式だった場合 if (r.Id < 0) { // データベースにエラー履歴を残す。 _db.AddErrorRecord(-r.Id); // 画面上のIDだけ更新する。 CurrentId = -r.Id; return; } // DataGridにレコードを追加する処理。 ResultData += r.Id.ToString() + "\n"; // DBにレコードを追加する処理。 _db.AddRecord(r); CurrentId = r.Id; }); try { await _collector.CollectRecordAsync(StartId, progress, cancelSrc.Token); } catch (OperationCanceledException) { IsCollecting = false; return; } IsCollecting = false; }