Skip to content

Commit 5c7e4b8

Browse files
committed
add no input/output examples
Signed-off-by: Hannah Hunter <[email protected]>
1 parent 98002c8 commit 5c7e4b8

1 file changed

Lines changed: 51 additions & 9 deletions

File tree

articles/azure-functions/durable/durable-functions-dotnet-isolated-overview.md

Lines changed: 51 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,24 +53,66 @@ public static class MyFunctions
5353
}
5454
```
5555

56-
#### Class-based example
56+
#### Class-based example (with input/output)
5757

5858
```csharp
59-
[Function(nameof(MyOrchestration))]
60-
public static async Task<string> MyOrchestration(
61-
[OrchestrationTrigger] TaskOrchestrationContext context)
59+
using Microsoft.DurableTask;
60+
61+
[DurableTask]
62+
public class MyOrchestration : TaskOrchestrator<string, string>
63+
{
64+
public override async Task<string> RunAsync(TaskOrchestrationContext context, string input)
65+
{
66+
return await context.CallActivityAsync<string>(nameof(MyActivity), input);
67+
}
68+
}
69+
70+
[DurableTask]
71+
public class MyActivity : TaskActivity<string, string>
72+
{
73+
public override Task<string> RunAsync(TaskActivityContext context, string input)
74+
{
75+
return Task.FromResult($"Processed: {input}");
76+
}
77+
}
78+
```
79+
80+
#### Class-based example (no input/output, `ILogger` in activity)
81+
82+
```csharp
83+
using Microsoft.DurableTask;
84+
using Microsoft.Extensions.Logging;
85+
86+
[DurableTask]
87+
public class MaintenanceOrchestration : TaskOrchestrator<object?, object?>
6288
{
63-
string input = context.GetInput<string>()!;
64-
return await context.CallActivityAsync<string>(nameof(MyActivity), input);
89+
public override async Task<object?> RunAsync(TaskOrchestrationContext context, object? input)
90+
{
91+
await context.CallActivityAsync(nameof(WriteHeartbeatLogActivity), (object?)null);
92+
return null;
93+
}
6594
}
6695

67-
[Function(nameof(MyActivity))]
68-
public static string MyActivity([ActivityTrigger] string input)
96+
[DurableTask]
97+
public class WriteHeartbeatLogActivity : TaskActivity<object?, object?>
6998
{
70-
return $"Processed: {input}";
99+
private readonly ILogger<WriteHeartbeatLogActivity> _logger;
100+
101+
public WriteHeartbeatLogActivity(ILogger<WriteHeartbeatLogActivity> logger)
102+
{
103+
_logger = logger;
104+
}
105+
106+
public override Task<object?> RunAsync(TaskActivityContext context, object? input)
107+
{
108+
_logger.LogInformation("Heartbeat logged at {Timestamp}.", DateTimeOffset.UtcNow);
109+
return Task.FromResult<object?>(null);
110+
}
71111
}
72112
```
73113

114+
Use `object?` as the generic type argument for class-based orchestrations and activities that don't need functional input or output. This pattern lets you use dependency injection (for example, `ILogger<T>`) in activities while still using the class-based model.
115+
74116
## Durable entities
75117

76118
Durable entities are supported in the .NET isolated worker. For more information, see the [developer's guide](./durable-functions-dotnet-entities.md).

0 commit comments

Comments
 (0)