так, чтобы 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
Обсуждают сегодня