src/Coast.Core/Saga/SagaManager.cs
(开头部分) 2KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
namespace Coast.Core
{
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Coast.Core.DataLayer;
using Coast.Core.EventBus;
using Microsoft.Extensions.Logging;
public class SagaManager : ISagaManager
{
private readonly IRepositoryFactory _repositoryFactory;
private readonly IEventBus _eventPublisher;
private readonly ILogger<SagaManager> _logger;
public SagaManager(IRepositoryFactory repositoryFactory, IEventBus eventPublisher, ILogger<SagaManager> logger)
{
_repositoryFactory = repositoryFactory;
_eventPublisher = eventPublisher;
_logger = logger;
}
/// <summary>
/// Create a saga that executes the saga steps in sequence.
/// </summary>
/// <param name="steps">saga steps.</param>
/// <param name="cancellationToken">Propagates notification that operations should be canceled.</param>
/// <returns>A <see cref="Task{TResult}"/> saga instance.</returns>
public async Task<Saga> CreateAsync(IEnumerable<EventRequestBody> steps = default, CancellationToken cancellationToken = default)
{
var saga = new Saga(steps);
return saga;
}
/// <summary>
/// start a new saga what executes the saga steps in sequence. And execute the first saga step.
/// </summary>
/// <param name="saga">saga steps.</param>
/// <param name="cancellationToken">Propagates notification that operations should be canceled.</param>
/// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
public async Task StartAsync(Saga saga, CancellationToken cancellationToken = default)
{
if (saga is null)
{
throw new ArgumentNullException(nameof(saga));
}
if (saga.State != SagaStateEnum.Created)
{
throw new ArgumentException("The saga has been created before.");
}
var @sagaEvents = saga.Start();
using (var session = _repositoryFactory.OpenSession())
{
session.StartTransaction();
var sagaRepository = session.ConstructSagaRepository();
后面还有 19 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
