У меня есть метод, который идет как это:Что такое синхронный эквивалент источника TaskCompletion <T>?
Task<MyClass> MyMethodAsync()
{
SendBluetoothMessageAsync();
var tcs = new TaskCompletionSource<MyClass>();
Bluetooth.MessageRecieved += (o, e) => tcs.SetResult(e.SomeProperty);
//this removes itself afterwards, but boilerplate removed
return await tcs.Task;
}
Для моего API, хотя, мне нужно предложить синхронную альтернативу. Поэтому мне нужен объект, который может дождаться сигнала, но может нести объект. AutoResetEvent почти соответствует моим критериям, и это то, что у меня до сих пор:
MyClass MyMethodAsync()
{
SendBluetoothMessage();
var are = new AutoResetEvent();
Bluetooth.MessageRecieved += (o, e) => are.Set(); //removes itself too
return null; //problem: how do I get the result?
}
Однако, мне нужно, чтобы получить результат. Я не вижу способа сделать это. Я думал о создании производного EventWaitHandle
, но codebehind выглядел явно странно, поэтому я не мог доверять ему. Может ли кто-нибудь подумать о том, как это сделать?
Это довольно немой. Благодарю. –