実行中のタスクがコード内の特定のポイントを超えて削除されています(下記参照)。それは単に実行を停止します。 iOSデバイスでのみ発生します。 iOSシミュレータとアンドロイドデバイスでは、完全に動作します。誰もこれの前にこのような何かを見た?私はそれがデッドロックやレースコンディションだとは思わない、他のデバイスではうまくいっていないだろうからね?iOSが実行中にタスクを中止する
ここにいくつかのコードがあります。
private async Task ExecuteFreshAndPopulateUI(IFetchVehicleCommand command)
{
List<Models.Vehicle.Vehicle> vehicles = await command.ReturnAndExecute<Models.Vehicle.Vehicle>();
var z = 9;
ListPopulateObservableCollection(vehicles, view.Vehicles);
}
public virtual async Task<dynamic> ReturnAndExecute<T>() where T : new()
{
await FlushCache<T>();
await Execute();
await CheckIfCached<T>();
return (dynamic) cachedResult.cachedObject;
}
public override async Task Execute()
{
try
{
dynamic x = await fetchableService.Fetch(userId);
if (x != null)
{
await cacheProvider.Cache(x); // THIS is the last line to be called from this method, it never returns
SetCached(true);
}
}
catch (Exception ex)
{
AddValidationError(ex.Message);
}
}
public async Task Cache(dynamic obj)
{
await database.InsertAllAsync((IEnumerable)obj); // this runs
} // this is the last breakpoint to be hit
編集:問題を明確にするためにコードを減らしました。
try-catchブロックでラップしようとしましたか?非同期タスクはそれらから例外をバブリングしないため、例外がスローされると何も失敗しません。それかもしれない! –
これはExecuteメソッドのtry/catch内にラップされていますが、catchしませんか?とにかく、それは正常にキャッシュされます(私はページを再度読み込もうとすると、キャッシュから取得して動作します) – Magnus
私はあなたが今どこに立っているのか分かりません...そして、 'Execute'が呼ばれている場所を見ることができません! 'ExecuteIfValid'にありますか? –