2013-10-15 70 views
0

我有一個是這樣的方法:什麼是TaskCompletionSource的同步等效物<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派生物,但代碼隱藏看起來很奇怪,所以我不能相信它。任何人都可以想辦法做到這一點?

回答

1

你可以簡單地聲明一個局部變量,在回調中設置它,然後返回它。

+0

這對我來說很愚蠢。謝謝。 –

相關問題