Azure / Azure/durabletask

Serialization of object containing Task<object> hangs task scheduling

Abierto
#72 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
C#
Estrellas
1.7k
Forks
335
Merge medio
2 d 23 h
PR fusionados (30 d)
6

Descripción

(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;
}
}
}

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Comienza en JsonDataConverter, línea 69, en la rama vnext, y reproduce el bloqueo con el ejemplo proporcionado de AsyncErrorTask y AsyncErrorOrch. Rastrea la serialización del Task no esperado almacenado en EventData.Result. Se considera terminado cuando el workflow proporcionado deja de bloquearse al programar la tarea completada.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
csharp
Área
backend, distributed-systems
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.