Red de conocimiento informático - Material del sitio web - Cómo hacer que NUnit espere con éxito a que se complete la anulación asincrónica

Cómo hacer que NUnit espere con éxito a que se complete la anulación asincrónica

Esta puede ser una pregunta un poco amplia, pero intentaré responderla de todos modos.

En C#, la regla general de async/await es que void async no es válido porque el hit después de ignorarlo vale la pena y, a la inversa, la tarea debe enviarse si no hay un valor de retorno del perceptivo. Pero, extrañamente, a principios de esta semana estaba escribiendo pruebas unitarias para algunos métodos asincrónicos que escribí cuando noté que NUnit recomienda marcar las pruebas asincrónicas como tarea nula o de retorno. Esto es realmente extraño, ¿cómo puede NUnit ejecutarse y esperar todo si se devuelve una Tarea? Puede simplemente esperar la Tarea y luego hacer lo que tiene que hacer, pero ¿cómo puede cerrarse si se devuelve void?

Así que abrí el código fuente y lo encontré. Puedo reproducirlo en una pequeña muestra, pero no puedo entender qué están haciendo. Supongo que no sé lo suficiente sobre SynchronizationContext y cómo funciona. El siguiente es el código:

class Program

{

static void Main(string[] args)

{

RunVoidAsyncAndWait();

Console.WriteLine("Presione cualquier tecla para continuar. . "); > }

finalmente

{

SynchronizationContext.SetSynchronizationContext.GetMethod("AsyncMethod")SetSynchronizationContext(previousContext);

}

}

}

}

Clase pública MiClase

{

public async void AsyncMethod( )

{

var t = Task.Factory.StartNew(()