так, чтобы Function возвращала значение в результате события, пришедшего в MessagingCenter.Subscribe или по таймауту в 5 секунд, что случится раньше.
По факту выполняется тут же.
Что я делаю не так? )
public async Task<NetworkAnswer> Function
{
SemaphoreSlim Semaphore = new SemaphoreSlim(1);
var Result = new NetworkAnswer();
MessagingCenter.Subscribe<MQTT, string>(this, Settings.MQTT.MessagingCenterReceived, (sender, arg) =>
{
Result.Data = "somedata";
Semaphore.Release();
});
await Semaphore.WaitAsync(TimeSpan.FromSeconds(5));
return Result;
}
Вызов функции:
var Answer = await Function();
Console.WriteLine(Answer.Data);
Можно сделать через TaskCompletionSource
Обсуждают сегодня