38 lines
1.4 KiB
C#
38 lines
1.4 KiB
C#
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Elsa.Dispatch;
|
|
using Elsa.Persistence;
|
|
using Elsa.Server.Orleans.Grains.Contracts;
|
|
using Elsa.Services;
|
|
using Microsoft.Extensions.Logging;
|
|
using Orleans;
|
|
|
|
namespace Elsa.Server.Orleans.Grains
|
|
{
|
|
public class WorkflowInstanceGrain : Grain, IWorkflowInstanceGrain
|
|
{
|
|
private readonly IWorkflowInstanceStore _store;
|
|
private readonly IWorkflowRunner _workflowRunner;
|
|
private readonly ILogger<WorkflowInstanceGrain> _logger;
|
|
|
|
public WorkflowInstanceGrain(IWorkflowInstanceStore store, IWorkflowRunner workflowRunner, ILogger<WorkflowInstanceGrain> logger)
|
|
{
|
|
_store = store;
|
|
_workflowRunner = workflowRunner;
|
|
_logger = logger;
|
|
}
|
|
|
|
public async Task ExecuteWorkflowAsync(ExecuteWorkflowInstanceRequest request, CancellationToken cancellationToken = default)
|
|
{
|
|
var workflowInstance = await _store.FindByIdAsync(request.WorkflowInstanceId, cancellationToken);
|
|
|
|
if(workflowInstance == null)
|
|
{
|
|
_logger.LogWarning("Workflow instance {WorkflowInstanceId} not found", request.WorkflowInstanceId);
|
|
return;
|
|
}
|
|
|
|
await _workflowRunner.RunWorkflowAsync(workflowInstance, request.ActivityId, request.Input, cancellationToken);
|
|
}
|
|
}
|
|
} |