为什么BluetoothSocket ConnectAsync会阻止UI线程? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么BluetoothSocket ConnectAsync会阻止UI线程? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我有一个简单的方法,我希望使用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项目)。

我尝试添加await到ConnectAsync调用:

IAsyncResult result = await _socket.ConnectAsync()

但这会产生编译器错误:

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

谁能发现我做错了什么?

答案

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

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

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

我不确定这里的ConnectAsync的返回类型是什么,所以你可以使用result获取所需的东西并从方法返回。

以上是关于为什么BluetoothSocket ConnectAsync会阻止UI线程? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Android bluetoothSocket连接错误

Android:BluetoothSocket 连接抛出 IOException

在 Android 中的 BluetoothSocket inputstream.read() 中实现超时

捕获 BluetoothSocket InputStream.read() 超时的线程

怎么通过蓝牙实现安卓手机与全站仪的通讯?

学习笔记——mail发送javax.mail.AuthenticationFailedException: failed to connect at javax.mail.Service.connec