I see that all you need is to trigger an event and forget, so async/await
is not the best option, after all await
will wait for the return.
You can achieve the expected result as follows:
public class Program
{
public void Main()
{
// Realiza algum processo;
this.Cadastrar();
// Realiza algum processo;
}
public void Cadastrar()
{
// Realiza algum processo;
Task.Run(() => this.PessoaNotificacao(pessoa.Nome));
// Realiza algum processo;
}
public void PessoaNotificacao(string nome)
{
// realiza algum processo longo.
}
}
In the above example, Cadastrar
will continue execution parallel to PessoaNotificacao
.
In any case, there is no guarantee that PessoaNotificacao
will finish execution successfully, so the best thing to do is to use HangFire
to manage the execution of the same.:
public class Program
{
public void Main()
{
// Realiza algum processo;
this.Cadastrar();
// Realiza algum processo;
}
public void Cadastrar()
{
// Realiza algum processo;
BackgroundJob.Enqueue(() => Program.PessoaNotificacao(pessoa.Nome));
// Realiza algum processo;
}
[DisplayName("Notificação enviada para {0}")]
public static void PessoaNotificacao(string nome)
{
// realiza algum processo longo.
}
}