Azure / Azure/durabletask

Serialization of object containing Task<object> hangs task scheduling

Aperta
#72 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
C#
Stelle
1.7k
Fork
335
Merge medio
2g 23h
PR unite (30g)
6

Descrizione

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

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

Inizia dalla riga 69 di JsonDataConverter, nel branch vnext, e riproduci il blocco con l'esempio fornito di AsyncErrorTask e AsyncErrorOrch. Traccia la serializzazione del Task non atteso memorizzato in EventData.Result. Il lavoro è completato quando il workflow fornito non si blocca più durante la pianificazione del task completato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
csharp
Ambito
backend, distributed-systems
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.