我的方法是这样的:
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
衍生物,但代码隐藏看起来很奇怪,所以我不相信它。谁能想到办法做到这一点?
答案 0 :(得分:1)
您可以简单地声明一个局部变量,在回调中设置它,然后返回它。