Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<Project>

<!-- Azure -->
<ItemGroup>
<PackageVersion Include="Microsoft.Azure.DurableTask.Core" Version="2.13.0" />
<PackageVersion Include="Microsoft.Azure.DurableTask.Emulator" Version="2.6.0" />
<PackageVersion Include="Microsoft.Azure.DurableTask.ServiceBus" Version="2.7.0" />
<PackageVersion Include="Microsoft.Azure.DurableTask.AzureStorage" Version="1.13.8" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="9.0.2" />
</ItemGroup>

<!-- Microsoft Extensions -->
Expand All @@ -18,6 +18,7 @@
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="$(ExtensionsPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(ExtensionsPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="$(ExtensionsPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="$(ExtensionsPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(ExtensionsPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="$(ExtensionsPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Debug" Version="$(ExtensionsPackageVersion)" />
Expand All @@ -41,7 +42,7 @@
<PackageVersion Include="OpenTelemetry.Exporter.Zipkin" Version="1.3.1" />
</ItemGroup>

<!-- Test projects -->
<!-- Test projects -->
<ItemGroup>
<PackageVersion Include="Bogus" Version="27.0.1" />
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
Expand Down
36 changes: 25 additions & 11 deletions samples/DurableTask.Extensions.Samples/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using DurableTask.Core;
using DurableTask.DependencyInjection;
using DurableTask.DependencyInjection.Extensions;
using DurableTask.Emulator;
using DurableTask.Extensions;
using DurableTask.Extensions.Samples;
Expand All @@ -14,17 +15,30 @@
.ConfigureServices(services =>
{
// Can register DataConvert in service container, or in options below.
// services.AddSingleton<DataConverter>(new StjDataConverter());
//services.AddSingleton<DataConverter>(new StjDataConverter());
services.AddSingleton<IConsole, ConsoleWrapper>();
services.AddHostedService<TaskEnqueuer>();
})
.ConfigureTaskHubWorker((context, builder) =>
{
builder.WithOrchestrationService(new LocalOrchestrationService());
builder.AddDurableExtensions(opt => opt.DataConverter = new StjDataConverter());
builder.AddClient();
builder.AddOrchestrationsFromAssembly<GreetingsOrchestration>(includePrivate: true);
builder.AddActivitiesFromAssembly<GreetingsOrchestration>(includePrivate: true);

IOrchestrationService orchestrationService = new LocalOrchestrationService();

services.AddTaskHubWorker((builder) =>
{
builder
.UseBuildTarget<DurableTaskHubWorker>()
.WithOrchestrationService(orchestrationService)

.AddDurableExtensions(opt => opt.DataConverter = new StjDataConverter())

.AddOrchestrationsFromAssembly<GreetingsOrchestration>(includePrivate: true)
.AddActivitiesFromAssembly<GreetingsOrchestration>(includePrivate: true);
});
services.AddTaskHubClient((builder) =>
{
builder
.UseBuildTarget<DurableTaskHubClient>()
.WithOrchestrationService((IOrchestrationServiceClient)orchestrationService);
});

})
.UseConsoleLifetime()
.Build();
Expand All @@ -37,9 +51,9 @@ internal class TaskEnqueuer : BackgroundService
private readonly IConsole _console;
private readonly string _instanceId = Guid.NewGuid().ToString();

public TaskEnqueuer(TaskHubClient client, IConsole console)
public TaskEnqueuer(ITaskHubClientProvider clientProvider, IConsole console)
{
_client = client ?? throw new ArgumentNullException(nameof(client));
_client = ((DurableTaskHubClient)clientProvider.GetClient()).Client;
_console = console ?? throw new ArgumentNullException(nameof(console));
}

Expand Down
45 changes: 34 additions & 11 deletions samples/DurableTask.Instrumentation.Samples/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using DurableTask.AzureStorage;
using DurableTask.Core;
using DurableTask.DependencyInjection;
using DurableTask.DependencyInjection.Extensions;
using DurableTask.Extensions;
using DurableTask.Extensions.Samples;
using DurableTask.Hosting;
Expand All @@ -25,18 +26,40 @@
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
IOrchestrationService orchestrationService = GetOrchestrationService();

services.AddTaskHubWorker((builder) =>
{
builder
.UseBuildTarget<DurableTaskHubWorker>()
.WithOrchestrationService(orchestrationService)

.AddDurableExtensions()
.AddDurableInstrumentation()

.AddOrchestrationsFromAssembly<TopOrchestration>(includePrivate: true)
.AddActivitiesFromAssembly<TopOrchestration>(includePrivate: true);
});
services.AddTaskHubClient((builder) =>
{
builder
.UseBuildTarget<DurableTaskHubClient>()
.WithOrchestrationService((IOrchestrationServiceClient)orchestrationService);
});

services.AddSingleton<IConsole, ConsoleWrapper>();
services.AddHostedService<TaskEnqueuer>();

})
.ConfigureTaskHubWorker((context, builder) =>
{
builder.WithOrchestrationService(GetOrchestrationService());
builder.AddDurableExtensions();
builder.AddDurableInstrumentation();
builder.AddClient();
builder.AddOrchestrationsFromAssembly<TopOrchestration>(includePrivate: true);
builder.AddActivitiesFromAssembly<TopOrchestration>(includePrivate: true);
})
//.ConfigureTaskHubWorker((context, builder) =>
//{
// builder.WithOrchestrationService(GetOrchestrationService());
// builder.AddDurableExtensions();
// builder.AddDurableInstrumentation();
// //builder.AddClient();
// builder.AddOrchestrationsFromAssembly<TopOrchestration>(includePrivate: true);
// builder.AddActivitiesFromAssembly<TopOrchestration>(includePrivate: true);
//})
.UseConsoleLifetime()
.Build();

Expand All @@ -60,9 +83,9 @@ internal class TaskEnqueuer : BackgroundService
private readonly IConsole _console;
private readonly string _instanceId = Guid.NewGuid().ToString();

public TaskEnqueuer(TaskHubClient client, IConsole console)
public TaskEnqueuer(ITaskHubClientProvider clientProvider, IConsole console)
{
_client = client ?? throw new ArgumentNullException(nameof(client));
_client = ((DurableTaskHubClient)clientProvider.GetClient()).Client;
_console = console ?? throw new ArgumentNullException(nameof(console));
}

Expand Down
21 changes: 21 additions & 0 deletions samples/DurableTask.Named.Samples/DurableTask.Named.Samples.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<Nullable>disable</Nullable>
<UserSecretsId>25384414-13b6-4ef1-8eeb-12236bcf0bcd</UserSecretsId>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Azure.DurableTask.Core" />
<PackageReference Include="Microsoft.Azure.DurableTask.Emulator" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" />
<PackageReference Include="Microsoft.Extensions.Hosting" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\DurableTask.Hosting\src\DurableTask.Hosting.csproj" />
</ItemGroup>

</Project>
19 changes: 19 additions & 0 deletions samples/DurableTask.Named.Samples/Generics/GenericActivity`1.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Copyright (c) Jacob Viau. All rights reserved.
// Licensed under the APACHE 2.0. See LICENSE file in the project root for full license information.

using DurableTask.Core;

namespace DurableTask.Named.Samples.Generics;

/// <summary>
/// An example of an open generic activity.
/// </summary>
/// <typeparam name="T">The open generic type.</typeparam>
public class GenericActivity<T> : TaskActivity<T, string>
{
/// <inheritdoc />
protected override string Execute(TaskContext context, T input)
{
return $"My generic param is {typeof(T)} with value '{input}'";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// Copyright (c) Jacob Viau. All rights reserved.
// Licensed under the APACHE 2.0. See LICENSE file in the project root for full license information.

using DurableTask.Core;

namespace DurableTask.Named.Samples.Generics;

/// <summary>
/// Runner for generic tasks example.
/// </summary>
public class GenericOrchestrationRunner : TaskOrchestration<string, string>
{
/// <inheritdoc />
public override async Task<string> RunTask(OrchestrationContext context, string input)
{
string result = await context.ScheduleTask<string>(typeof(GenericActivity<int>), 10);
await PrintAsync(context, result);

result = await context.ScheduleTask<string>(typeof(GenericActivity<string>), "example");
await PrintAsync(context, result);

result = await context.ScheduleTask<string>(typeof(GenericActivity<MyClass>), new MyClass());
await PrintAsync(context, result);

return string.Empty;
}

private static Task<string> PrintAsync(OrchestrationContext context, string input)
{
return context.ScheduleTask<string>(typeof(PrintTask), input);
}

private class MyClass
{
public override string ToString() => "Example private class";
}
}
30 changes: 30 additions & 0 deletions samples/DurableTask.Named.Samples/Greetings/GetUserTask.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Copyright (c) Jacob Viau. All rights reserved.
// Licensed under the APACHE 2.0. See LICENSE file in the project root for full license information.

using DurableTask.Core;

namespace DurableTask.Named.Samples.Greetings;

/// <summary>
/// A task activity for getting a username from console.
/// </summary>
public class GetUserTask : TaskActivity<string, string>
{
private readonly IConsole _console;

/// <summary>
/// Initializes a new instance of the <see cref="GetUserTask"/> class.
/// </summary>
/// <param name="console">The console output helper.</param>
public GetUserTask(IConsole console)
{
_console = console ?? throw new ArgumentNullException(nameof(console));
}

/// <inheritdoc />
protected override string Execute(TaskContext context, string input)
{
_console.WriteLine("Please enter your name:");
return _console.ReadLine();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Copyright (c) Jacob Viau. All rights reserved.
// Licensed under the APACHE 2.0. See LICENSE file in the project root for full license information.

using DurableTask.Core;

namespace DurableTask.Named.Samples.Greetings;

/// <summary>
/// A task orchestration for greeting a user.
/// </summary>
public class GreetingsOrchestration : TaskOrchestration<string, string>
{
/// <inheritdoc />
public override async Task<string> RunTask(OrchestrationContext context, string input)
{
string user = await context.ScheduleTask<string>(typeof(GetUserTask));
string greeting = await context.ScheduleTask<string>(typeof(SendGreetingTask), user);
return greeting;
}
}
43 changes: 43 additions & 0 deletions samples/DurableTask.Named.Samples/Greetings/SendGreetingTask.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// Copyright (c) Jacob Viau. All rights reserved.
// Licensed under the APACHE 2.0. See LICENSE file in the project root for full license information.

using DurableTask.Core;

namespace DurableTask.Named.Samples.Greetings;

/// <summary>
/// A task for sending a greeting.
/// </summary>
public sealed class SendGreetingTask : AsyncTaskActivity<string, string>
{
private readonly IConsole _console;

/// <summary>
/// Initializes a new instance of the <see cref="SendGreetingTask"/> class.
/// </summary>
/// <param name="console">The console output helper.</param>
public SendGreetingTask(IConsole console)
{
_console = console ?? throw new ArgumentNullException(nameof(console));
}

/// <inheritdoc />
protected override async Task<string> ExecuteAsync(TaskContext context, string user)
{
string message;
if (!string.IsNullOrWhiteSpace(user) && user.Equals("TimedOut"))
{
message = "GetUser Timed out!!!";
_console.WriteLine(message);
}
else
{
_console.WriteLine("Sending greetings to user: " + user + "...");
await Task.Delay(5 * 1000);
message = "Greeting sent to " + user;
_console.WriteLine(message);
}

return message;
}
}
30 changes: 30 additions & 0 deletions samples/DurableTask.Named.Samples/PrintTask.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Copyright (c) Jacob Viau. All rights reserved.
// Licensed under the APACHE 2.0. See LICENSE file in the project root for full license information.

using DurableTask.Core;

namespace DurableTask.Named.Samples;

/// <summary>
/// An activity to print to the console.
/// </summary>
public class PrintTask : TaskActivity<string, string>
{
private readonly IConsole _console;

/// <summary>
/// Initializes a new instance of the <see cref="PrintTask"/> class.
/// </summary>
/// <param name="console">The console to print to.</param>
public PrintTask(IConsole console)
{
_console = console ?? throw new ArgumentNullException(nameof(console));
}

/// <inheritdoc />
protected override string Execute(TaskContext context, string input)
{
_console.WriteLine(input);
return string.Empty;
}
}
Loading
Loading