コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
 internal Lending(LendingData data, ValueTaskHandle <Unit> disposedTaskHandle)
 {
     _data = data;
     _disposedTaskHandle = disposedTaskHandle;
 }
コード例 #3
0
 private (LendingData, ValueTask <Unit>) Match(ValueTask <Unit> disposedTask, LendingData data, CancellationToken _3, CancellationToken _4)
 {
     return(data, disposedTask);
 }