/// <summary> /// Делает объект <paramref name="obj"/> доступным для использования. /// </summary> /// <param name="obj">Объект, предоставляемый в пользование.</param> /// <param name="stoppingToken">Сигнал, указывающий пользователю объекта, что он должен прекратить использование объекта.</param> /// <exception cref="OperationCanceledException">Сработал сигнал <paramref name="stoppingToken"/>.</exception> /// <exception cref="ObjectBrokenException">Пользователь отметил объект, как сломанный.</exception> public async ValueTask UseAsync(T obj, CancellationToken stoppingToken) { var lendingData = new LendingData(obj, stoppingToken); for (; ;) { stoppingToken.ThrowIfCancellationRequested(); var lendingDisposedTask = await _matchingQueue.MatchAsync(lendingData, stoppingToken).ConfigureAwait(false); // Если пользователь объекта отметил его как сломанный, // то следующая строка выбросит исключение ObjectBrokenException. await lendingDisposedTask.ConfigureAwait(false); } }
internal Lending(LendingData data, ValueTaskHandle <Unit> disposedTaskHandle) { _data = data; _disposedTaskHandle = disposedTaskHandle; }
private (LendingData, ValueTask <Unit>) Match(ValueTask <Unit> disposedTask, LendingData data, CancellationToken _3, CancellationToken _4) { return(data, disposedTask); }