Код: Выделить всё
public class SomeClass
{
private readonly ConcurrentQueue _sharedData = [];
private Task? _backgroundTask;
private async Task Start()
{
CancellationTokenSource cts = new();
_backgroundTask = Task.Run(() => BackgroundWork(cts.Token));
for (int i = 0; i < 100; i++)
{
_sharedData.TryDequeue(out int data);
Status = string.Join(", ", _sharedData.Select(a => a.ToString()));
await Task.Delay(300);
}
cts.Cancel();
}
private async Task BackgroundWork(CancellationToken ct)
{
while (!ct.IsCancellationRequested)
{
if (_sharedData.Count >= 5)
{
await Task.Delay(250);
continue;
}
_sharedData.Enqueue(Random.Shared.Next());
}
Status = "bg task done.";
}
}
Контекст
В реальном приложении основной цикл работает с файлами, загружаемыми из центральный сервер. Чтобы сократить время ожидания, я хочу предварительно кэшировать следующую пару файлов, пока пользователь работает с текущим.
Подробнее здесь: https://stackoverflow.com/questions/792 ... ontinue-it
Мобильная версия