mirror of https://github.com/dapr/quickstarts.git
Add C# TaskChaining
Signed-off-by: Marc Duiker <marcduiker@users.noreply.github.com>
This commit is contained in:
parent
bd31cf7d62
commit
3ce6f189eb
|
|
@ -0,0 +1,12 @@
|
|||
using Dapr.Workflow;
|
||||
|
||||
namespace TaskChaining.Activities;
|
||||
|
||||
internal sealed class Activity1 : WorkflowActivity<string, string>
|
||||
{
|
||||
public override Task<string> RunAsync(WorkflowActivityContext context, string input)
|
||||
{
|
||||
Console.WriteLine($"{nameof(Activity1)}: Received input: {input}.");
|
||||
return Task.FromResult($"{input} is" );
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
using Dapr.Workflow;
|
||||
|
||||
namespace TaskChaining.Activities;
|
||||
|
||||
internal sealed class Activity2 : WorkflowActivity<string, string>
|
||||
{
|
||||
public override Task<string> RunAsync(WorkflowActivityContext context, string input)
|
||||
{
|
||||
Console.WriteLine($"{nameof(Activity2)}: Received input: {input}.");
|
||||
return Task.FromResult($"{input} task" );
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
using Dapr.Workflow;
|
||||
|
||||
namespace TaskChaining.Activities;
|
||||
|
||||
internal sealed class Activity3 : WorkflowActivity<string, string>
|
||||
{
|
||||
public override Task<string> RunAsync(WorkflowActivityContext context, string input)
|
||||
{
|
||||
Console.WriteLine($"{nameof(Activity3)}: Received input: {input}.");
|
||||
return Task.FromResult($"{input} chaining" );
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Dapr.Workflow;
|
||||
using TaskChaining.Activities;
|
||||
|
||||
namespace TaskChaining
|
||||
{
|
||||
public class ChainingWorkflow : Workflow<string, string>
|
||||
{
|
||||
public override async Task<string> RunAsync(WorkflowContext context, string input)
|
||||
{
|
||||
var result1 = await context.CallActivityAsync<string>(
|
||||
nameof(Activity1),
|
||||
input);
|
||||
var result2 = await context.CallActivityAsync<string>(
|
||||
nameof(Activity2),
|
||||
result1);
|
||||
var workflowResult = await context.CallActivityAsync<string>(
|
||||
nameof(Activity3),
|
||||
result2);
|
||||
|
||||
return workflowResult;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
using Dapr.Workflow;
|
||||
using TaskChaining;
|
||||
using TaskChaining.Activities;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
builder.Services.AddDaprWorkflow(options => {
|
||||
options.RegisterWorkflow<ChainingWorkflow>();
|
||||
options.RegisterActivity<Activity1>();
|
||||
options.RegisterActivity<Activity2>();
|
||||
options.RegisterActivity<Activity3>();
|
||||
});
|
||||
var app = builder.Build();
|
||||
|
||||
app.MapPost("/start", async () => {
|
||||
await using var scope = app.Services.CreateAsyncScope();
|
||||
var workflowClient = scope.ServiceProvider.GetRequiredService<DaprWorkflowClient>();
|
||||
|
||||
var instanceId = await workflowClient.ScheduleNewWorkflowAsync(
|
||||
name: nameof(ChainingWorkflow),
|
||||
input: "This");
|
||||
|
||||
return Results.Accepted(instanceId);
|
||||
});
|
||||
|
||||
app.Run();
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"$schema": "https://json.schemastore.org/launchsettings.json",
|
||||
"profiles": {
|
||||
"http": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "http://localhost:5255",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"https": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "https://localhost:7086;http://localhost:5255",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Dapr.Workflow" Version="1.15.2" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
@apphost=http://localhost:5255
|
||||
|
||||
### Start the workflow
|
||||
# @name startWorkflowRequest
|
||||
POST {{ apphost }}/start
|
||||
|
||||
|
||||
@instanceId={{startWorkflowRequest.response.headers.Location}}
|
||||
@daprHost=http://localhost:3555
|
||||
### Get the workflow status
|
||||
GET {{ daprHost }}/v1.0/workflows/dapr/{{ instanceId }}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
version: 1
|
||||
common:
|
||||
resourcesPath: ../../resources
|
||||
apps:
|
||||
- appID: chaining
|
||||
appDirPath: .
|
||||
appPort: 5255
|
||||
daprHTTPPort: 3555
|
||||
command: ["dotnet", "run"]
|
||||
appLogDestination: console
|
||||
daprdLogDestination: console
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
apiVersion: dapr.io/v1alpha1
|
||||
kind: Component
|
||||
metadata:
|
||||
name: statestore
|
||||
spec:
|
||||
type: state.redis
|
||||
version: v1
|
||||
initTimeout: 1m
|
||||
metadata:
|
||||
- name: redisHost
|
||||
value: localhost:6379
|
||||
- name: redisPassword
|
||||
value: ""
|
||||
- name: actorStateStore
|
||||
value: "true"
|
||||
Loading…
Reference in New Issue