为什么BluetoothSocket ConnectAsync会阻止UI线程?

时间:2018-03-05 15:28:20

标签: c# xamarin.forms async-await

我想用await调用一个简单的方法。它看起来像这样:

private async Task<bool> Connect()
{
    await Task.Delay(TimeSpan.FromSeconds(0.5));
    IAsyncResult result = _socket.ConnectAsync();
    var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5), true);

    return success;
}

我这样调用方法(来自异步方法):

bool cnnSuccess = await Connect();

但是当调用该方法时,它仍然阻塞了UI线程(xamarin.forms项目)。

我尝试在ConnectAsync调用中添加await:

  

IAsyncResult result = await _socket.ConnectAsync()

但这会产生编译错误:

  

无法将类型void隐式转换为System.IAsyncResult

有人能发现我做错了吗?

1 个答案:

答案 0 :(得分:0)

您可以简单地将awaitConnectAsync方法调用一起使用,它不应该阻止调用者:

private async Task<bool> Connect()
{
    await Task.Delay(TimeSpan.FromSeconds(0.5));
    var result = await _socket.ConnectAsync();

    //......... your code here 
}

我不确定ConnectAsync的返回类型是什么,因此您可以使用result获取所需内容并从方法返回。