Cómo hacer que NUnit espere con éxito a que se complete la anulación asincrónica
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);
} p>
}
}
}
Clase pública MiClase
{
public async void AsyncMethod( )
{
var t = Task.Factory.StartNew(()