非同期APIが同期作る:私はこのように定義されたいくつかのデータを取得するためにAPIに接続してい
クライアントオブジェクトClientConnection
、1が要求を送信することができます。 コールバックを受信するためにClientConnection
に渡す必要があるIApiインターフェイス。 を模式的にそれは次のようになります。requestidで、グローバルオブジェクトを介して要求を送信し、そのrequestidでタグ付けされた答えを受ける:
// defined in the API dll
public class ClientConnection {
public ClientConnection(IApi api) { ... }
public void request(int reqid, string reqdetails) { ... }
}
interface IApi
{
void receiveData(int reqid, string ans);
}
は今、明らかにこれは物事のかなり標準的な非同期的な方法です。
同期しているラッパーを作成したいとします。これを行う最も自然な方法は何でしょうか?スレッド同期やスレッドを使用する代わりに、非同期待機を使用するスマートな方法はありますか?
class MyWrapper : IApi
{
private ClientConnection _client;
private int _reqToken = 0;
public MyWrapper()
{
_client = new ClientConnection(this);
}
public string getData(string reqdetails)
{
_client.request(_reqToken++, reqdetails);
// what to do here?
}
public void receiveData(int reqid, string data) {
// what to do here?
}
}
をいくつかのバグが含まれてい、私は答えを修正することができるように – Evk