任务状态WaitingForActivation

时间:2014-07-16 16:54:59

标签: c# xamarin xamarin.android

我有以下功能:

async public Task<bool> checkNetwork (RestClient _client, ConnectivityManager conn)
    {
        var connected = false;
        var activeConn = conn.ActiveNetworkInfo;
        if (activeConn != null && activeConn.IsConnected) {
            var request = new RestRequest ();
            request.Timeout = 5000;
            var response = await _client.ExecuteAwait (request);
            //Task<IRestResponse> tmpResponse = _client.ExecuteAsync (request);
            if (response.ErrorException != null)
                connected = false;
            else
                connected = true;
        }

        return connected;
    }

它一直挂起,因为当我调用它时状态永远不会离开WaitingForActivation。有什么想法吗?

1 个答案:

答案 0 :(得分:13)

  

它一直悬挂,因为当我调用它时状态永远不会离开WaitingForActivation。

实际上,WaitingForActivation只表示任务尚未完成。这不是挂起的原因,而是它的一个指标。承诺任务(包括async方法返回的任务)将保持WaitingForActivation状态,直到完成为止;我更详细地描述了任务状态机on my blog

导致死锁的最可能原因是在堆栈中进一步调用Task<T>.ResultTask.Wait。我在完整的on my blog中描述了这个死锁,但它的要点是await将捕获“当前上下文”并使用它来恢复其async方法。如果从UI线程调用,那么该上下文是UI线程,如果通过调用Result / Wait阻止了UI线程,那么async方法无法在该UI线程上恢复

相关问题