Reo.Core.AsyncOperations
10.0.27
See the version list below for details.
dotnet add package Reo.Core.AsyncOperations --version 10.0.27
NuGet\Install-Package Reo.Core.AsyncOperations -Version 10.0.27
<PackageReference Include="Reo.Core.AsyncOperations" Version="10.0.27" />
<PackageVersion Include="Reo.Core.AsyncOperations" Version="10.0.27" />
<PackageReference Include="Reo.Core.AsyncOperations" />
paket add Reo.Core.AsyncOperations --version 10.0.27
#r "nuget: Reo.Core.AsyncOperations, 10.0.27"
#:package Reo.Core.AsyncOperations@10.0.27
#addin nuget:?package=Reo.Core.AsyncOperations&version=10.0.27
#tool nuget:?package=Reo.Core.AsyncOperations&version=10.0.27
Описание
Набор сервисов для интеграции с микросервисом асинхронных операций.
Мотивация
Этот набор сервисов предназначен для облегчения интеграции с микросервисом Reo.MonitoringAsyncOperations.
Набор сервисов предоставляет абстрактный уровень доступа к функциональности Reo.MonitoringAsyncOperations, что
упрощает интеграцию для клиентских приложений. Вместо того, чтобы напрямую взаимодействовать с микросервисом,
разработчики могут использовать готовые методы и функции, предоставляемые этим набором сервисов.
Установка
Для того, чтобы установить сервисы для интеграции с микросервисом асинхронных операций, необходимо добавить
соответствующий пакет Install-Package Reo.Core.AsyncOperations.
Затем зарегистрировать сервисы через следующий метод расширения:
AddAsyncOperationServices(configuration.GetSection(nameof(AuthConfigureOptions)).Get<AuthConfigureOptions>()!.ClientId)
Если ваш сервис не использует AuthConfigureOptions, то передайте наименование сервиса вручную, например:
reo-waste-sources-api.
Описание сервисов
IRequestContextService
Этот интерфейс представляет сервис для работы с контекстом запроса. Он предоставляет методы для захвата, получения и удаления контекста запроса. Вот краткое описание каждого метода:
CaptureRequestContext: Этот метод захватывает контекст запроса и возвращает его идентификатор. Он принимает параметр
time, представляющий абсолютное время жизни контекста запроса относительно текущего момента.
GetRequestContext: Этот метод получает контекст запроса по его идентификатору. Если контекст существует, он
возвращает объект типа RequestContextDto, содержащий информацию о контексте запроса. Если контекст не найден, метод
возвращает null.
RemoveRequestContext: Этот метод удаляет контекст запроса по его идентификатору. После удаления контекста запроса, он становится недоступным для дальнейшего использования.
IAsyncOperationProcessedFactory
Этот интерфейс представляет фабрику для создания событий о асинхронных операциях. Он предоставляет методы для создания
событий о начале операции, о ошибке операции и о завершении операции. Достаточно создать событие одним из методов,
например CreateRunningEvent, а далее использовать методы SetState, SetResult, SetCompleteDate для изменения
состояние операции. Вот краткое описание каждого метода:
CreateRunningEvent: Этот метод создает событие о начале операции. Принимает идентификатор запроса requestId,
наименование операции name, тип операции type и текстовое описание состояния result.
Если передать name равный null, то в качестве наименования операции будет использоваться path запроса. Например:
/api/v1/elastic/reindex
CreateErrorEvent: Этот метод создает событие о ошибке операции. Принимает параметры такие же, как и предыдущий метод.
CreateCompletedEvent: Этот метод создает событие о завершении операции. Принимает параметры такие же, как и предыдущие методы.
IAsyncOperationEventService
Этот интерфейс представляет сервис для работы с событиями о асинхронных операциях. Он предоставляет метод
SendEventAsync, который отправляет событие о асинхронной операции. Для отправки событий используется MassTransit,
так что удостоверьтесь что у вас он настроен.
IRequestContextId
Этот интерфейс представляет собой идентификатор контекста запроса. Используя этот интерфейс, можно обеспечить стандартизацию идентификации запросов в системе, что упрощает их отслеживание и управление. Все ваши сервисы, которым требуется доступ к контексту запроса, должны наследовать этот интерфейс.
Использование
Захватить контекст нужно до начала выполнения операции в отдельном потоке.
// Захватываем контекст запроса на 6 часов
var requestId = _requestContextService.CaptureRequestContext(TimeSpan.FromHours(6));
_ = Task.Run(async () =>
{
// Передаем идентификатор захваченного контекста запроса в наш сервис
_reindaxable.RequestId = requestId;
// Запускаем асинхронную операцию реиндексации
await _reindaxable.ReindexAsync(default);
// Удаляем контекст запроса после выполнения операции реиндексации
_requestContextService.RemoveContext(requestId);
}, default);
Сервис должен наследовать интерфейс IRequestContextId чтобы можно было передать ему идентификатор захваченного
контекста запроса.
public interface IAsyncReindaxable : IRequestContextId
{
// ...
}
Теперь внутри сервиса нужно вызвать фабрику IAsyncOperationProcessedFactory для создания события о асинхронной
операции и передать в нее свойство RequestId, фабрика в свою очередь получит по этому идентификатору контекст
захваченного запроса и создаст событие, которое нужно отправить, используя IAsyncOperationEventService.
var eventModel = _factory.CreateRunningEvent(RequestId, null, OperationType.Reindex, null);
await _eventService.SendEventAsync(eventModel, token);
// ...
eventModel
.SetState(OperationState.Completed)
.SetResult("Обработано 100% записей")
.SetCompleteDate(_timeService.CurrentDateTime);
await _eventService.SendEventAsync(eventModel, token);
Общие рекомендации
- Отправляйте события для промежуточных результатов выполнения устанавливая
result. Например: Обработано 0%, 10%, 20% и т.д. - Для операции реиндексации в качестве наименования передавайте наименование индекса. Например:
waste_source_doc, в остальных случаях можно передавать его какnull, в таком случае в качестве наименования будет использоватьсяpathиз контекста запроса. - Удаляйте контекст запроса, если он больше не требуется.
Лицензия
Данный пакет распространяется под лицензией MIT.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- AspNetCore.HealthChecks.Redis (>= 9.0.0)
- AspNetCore.HealthChecks.UI.Client (>= 9.0.0)
- FluentValidation (>= 12.1.1)
- FluentValidation.AspNetCore (>= 11.3.1)
- Flurl (>= 4.0.0)
- Flurl.Http (>= 4.0.2)
- JetBrains.Annotations (>= 2025.2.4)
- LinqKit.Core (>= 1.2.9)
- MassTransit (>= 8.5.8 && < 9.0.0)
- MassTransit.RabbitMQ (>= 8.5.8 && < 9.0.0)
- Microsoft.AspNetCore.Mvc.NewtonsoftJson (>= 10.0.2)
- Microsoft.Bcl.AsyncInterfaces (>= 10.0.2)
- Microsoft.Extensions.Caching.Abstractions (>= 10.0.2)
- Microsoft.Extensions.Caching.StackExchangeRedis (>= 10.0.2)
- Microsoft.Extensions.Configuration (>= 10.0.2)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.2)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.2)
- Microsoft.Extensions.DependencyInjection (>= 10.0.2)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.2)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.2)
- Microsoft.Extensions.Http.Polly (>= 10.0.2)
- Microsoft.Extensions.Logging (>= 10.0.2)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.2)
- Microsoft.Extensions.Options (>= 10.0.2)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.2)
- NEST (>= 7.17.5)
- Newtonsoft.Json (>= 13.0.4)
- Polly (>= 8.5.0)
- RabbitMQ.Client (>= 7.2.0)
- RedLock.net (>= 2.3.2)
- Reo.Core.DistributedCache (>= 10.0.27)
- Reo.Core.Queue.MassTransit.Models (>= 10.0.27)
- stbychkov.AutoLoggerMessage (>= 1.0.15)
- Swashbuckle.AspNetCore (>= 10.1.2)
- System.ComponentModel.Annotations (>= 5.0.0)
- System.Linq.Async (>= 7.0.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Reo.Core.AsyncOperations:
| Package | Downloads |
|---|---|
|
Reo.Core.Elastic
Package Description |
|
|
Reo.MnoApi.Sensors
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.0.33 | 0 | 2/13/2026 |
| 10.0.32 | 0 | 2/13/2026 |
| 10.0.31 | 0 | 2/13/2026 |
| 10.0.30 | 34 | 2/12/2026 |
| 10.0.29 | 33 | 2/12/2026 |
| 10.0.28 | 47 | 2/11/2026 |
| 10.0.27 | 56 | 2/11/2026 |
| 10.0.26 | 109 | 2/9/2026 |
| 10.0.25 | 112 | 2/9/2026 |
| 10.0.24 | 123 | 2/9/2026 |
| 10.0.23 | 107 | 2/9/2026 |
| 10.0.22 | 108 | 2/9/2026 |
| 10.0.21 | 110 | 2/9/2026 |
| 10.0.20 | 107 | 2/9/2026 |
| 10.0.15 | 122 | 2/6/2026 |
| 10.0.14 | 116 | 2/6/2026 |
| 10.0.13 | 313 | 2/4/2026 |
| 10.0.12 | 137 | 2/3/2026 |
| 10.0.11 | 144 | 2/2/2026 |
| 10.0.10 | 145 | 1/29/2026 |