⬆️ назад ⬆️
⬆️ назад ⬆️
Когда это нужно
Только тогда, когда есть чужое внешнее API, которое не принимает токен отмены, но вам необходимо прервать ожидание.
Например, загрузка
```
```
Т.е. некоторые такие "неотменяемые" операции обязательно нужно дожидаться и финализировать.
⬇️ далее ⬇️
Когда это нужно
Только тогда, когда есть чужое внешнее API, которое не принимает токен отмены, но вам необходимо прервать ожидание.
Например, загрузка
Addressables. Но тут важно не просто прервать ожидание: нужно ещё в фоне дождаться завершения загрузки и выполнить затем Release. Иначе этот ассет останется невыгруженным.```
// один из десятка способов это сделать
async UniTask<Sprite> LoadIconAsync(string key, CancellationToken token)
{
var handle = Addressables.LoadAssetAsync<Sprite>(key);
try
{
return await handle.ToUniTask()
.AttachExternalCancellation(token);
}
catch (OperationCanceledException)
{
_ = handle.ToUniTask()
.ContinueWith(_ => Addressables.Release(handle));
throw;
}
}```
Т.е. некоторые такие "неотменяемые" операции обязательно нужно дожидаться и финализировать.
⬇️ далее ⬇️
Просмотры: 21