2017-09-12 13 views
0

私はC#で新しく、一部のSwift Bluetooth LEコードをC#UWPに変換します。代わりにコールバックを使用するためにawaitを使用してコードを変換することはできます

async/awaitを使用するコードがあります。しかし、それをSwiftに似ているようにするには、Asyncが完了したAPIがコールバックされるのが理想です。例えば

、SWIFTコードは:

private func connect_to(per : CBPeripheral) { 
    centralManager?.connect(per, options: nil) 
} 

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) { 
    peripheral.delegate = self 
    peripheral.discoverServices([transferServiceUUID]) 
} 

第funcがコールバックです。現在、C#で私はこのようなものを持っている:

private async void ConnectByID_OrAddr(UInt64 btAddr) 
{ 
    btLEDev = await BluetoothLEDevice.FromBluetoothAddressAsync(btAddr); 
    if (btLEDev == null) { 
    // TODO: failure notifications... 
    return; 
    } 

    GattDeviceServicesResult result = 
     await btLEDev.GetGattServicesAsync(BluetoothCacheMode.Uncached); 
    // etc. 
} 

私はC#で委任を使用しての参照を見ましたが、API呼び出しでこれを行う方法を私に明確ではありませんでした。

+4

非同期にチャンスを待ってください。実際にコードを読みやすくしてくれますし、それを何かから作成することもできます。それはコードのコールバックバージョンと似ています。 –

+0

この質問は不明です。カスタムデリゲート定義を作成したり、アクション/関数を使用したり、コールバックインターフェイスを作成したり、クラスを継承したりすることができます。しかし、非同期的には読みやすくなります。 –

+0

私の問題は、カスタムデリゲート定義を行う方法を理解できなかったことです。しかし、この時点で、私は非同期/待機で動作するように確信していると思います。 – bobwki

答えて

2

ContinueWithTasksと同じ方法でPromissesと同じ方法で連結して、thenをJavascriptでチェーンすることができます。

private static void ConnectByID_OrAddr2(UInt64 btAddr) 
{ 
    BluetoothLEDevice.FromBluetoothAddressAsync(btAddr) 
     .ContinueWith(btLEDevTask => // Callback for when first task completes 
     { 
      var btLEDev = btLEDevTask.Result; 
      if (btLEDev == null) 
      { 
       // TODO: failure notifications... 
       return Task.FromResult<GattDeviceServicesResult>(null); 
      } 
      return btLEDev.GetGattServicesAsync(BluetoothCacheMode.Uncached); 
     }) 
     .Unwrap() 
     .ContinueWith(resultTask =>// Callback for when second task completes 
     { 
      var result = resultTask.Result; 
      Console.WriteLine("Result:" + result); 
     }); 
} 

Oppinion:それのための十分な理由がない限り

ContinueWithバージョンを使用しないでください。個人的にこのスタイルのコードは非常に難しく、いつでもasync/awaitバージョンを好むでしょう。

+2

ありがとうございます。これは私が探していたものですが、私はあなたの言語設備を使用するコメントは良いものだと思います。スウィフトスタイルはデリゲートコールバックに大きく依存することです。圧倒されてしまい、面倒です。 – bobwki

関連する問題