Crear una función async await utilizando delegates en C#.
Tengo los siguientes delegados que necesito convertir a async await
.
Mi delegado:
public delegate bool GetUserFromAccessTokenHandler(string token, out User user);
public GetUserFromAccessTokenHandler GetUserFromAccessToken;
public FunctionalOperations(IUnitOfWork unitOfWork)
{
GetUserFromAccessToken = new GetUserFromAccessTokenHandler(GetUserFromAccessTokenFunction);
_unitOfWork = unitOfWork;
}
Ahora necesito agregar async
al método GetUserFromAccessTokenFunction
, pero ocurre un error:
private async bool GetUserFromAccessTokenFunction (string token, out User user)
{
var x = await _unitOfWork.User.Get(...);
}
Los dos errores que obtengo son:
1) La llamada es ambigua entre los siguientes métodos o propiedades: 'GetUserFromAccessTokenFunction' y 'GetUserFromAccessTokenFunction'
2) El tipo de retorno de un método async debe ser void, Task o Task<T>
¿Cómo puedo corregir la declaración de mi delegado para que se adapte a mis necesidades?
davy.ai
Para hacer que el delegado sea asíncrono, debes modificarlo para que acepte un método asíncrono como su objetivo, y su tipo de retorno debería ser
Task<bool>
en lugar debool
. Así es como puedes actualizar tu código:Con esta modificación, el código debería compilar sin errores. Ahora puedes usar el delegado así:
csharp
User user;
bool result = await GetUserFromAccessToken(token, out user);