Azure / Azure/durabletask

Serialization of object containing Task<object> hangs task scheduling

Open
#72 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C#
Stars
1.7k
Forks
335
Avg merge
2d 23h
Merged PRs (30d)
6

Description

(On the vnext branch)

When we use the following code, and forget to "await" on the "ExecuteIt" method in AsyncErrorTask, scheduling the completed task hangs in serialization of the event data in JsonDataConverter, line 69.

public class EventData
{
public object Result { get; set; }
public string Exception { get; set; }
}

public class AsyncErrorTask : AsyncTaskActivity
{
protected async override Task ExecuteAsync(TaskContext context, string input)
{
await Task.Delay(10);

// FAILING:
return ExecuteIt();

// SUCCEEDING:
// return await ExecuteIt();
}

private Task ExecuteIt()
{
return Task.FromResult("Done");
}
}

public class AsyncWriteSuccessTask : AsyncTaskActivity
{
protected override Task ExecuteAsync(TaskContext context, EventData input)
{
Console.WriteLine($"[TASK]\r\n{input.Result}\r\n");
return Task.FromResult(string.Empty);
}
}

public class AsyncWriteErrorTask : AsyncTaskActivity
{
protected override Task ExecuteAsync(TaskContext context, EventData input)
{
Console.WriteLine($"[TASK]\r\n{input.Exception}\r\n");
return Task.FromResult(string.Empty);
}
}

public class AsyncErrorOrch : TaskOrchestration
{
public override async Task RunTask(OrchestrationContext context, object input)
{
var data = new EventData();

try
{
data.Result = await context.ScheduleTask(typeof(AsyncErrorTask), string.Empty);
await context.ScheduleTask(typeof (AsyncWriteSuccessTask), data);
return null;
}
catch (Exception ex)
{
data.Exception = ex.ToString();
await context.ScheduleTask(typeof (AsyncWriteErrorTask), data);
return null;
}
}
}

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.