等待声明后的代码不运行

时间:2016-01-07 05:29:23

标签: c# wpf asynchronous async-await

我知道论坛里有很多类似的问题,但我没有找到和我一样的问题。请查看下面的代码。

product

永远不会达到return v语句。我需要TaskCaller的结果来做更多的过程。

2 个答案:

答案 0 :(得分:6)

您没有开始任何任务,因此无法完成任务(他们将永远陷入Status = TaskStatus.Created)。由于这些任务无法完成,您的await将无限期地等待。使用Task.Run返回(已启动)任务,以便安排线程池的工作,即:

Task<string> TestTask()
{
    return Task.Run(() =>
    {
        Thread.Sleep(2000);
        return "TestTask";
    });
}

或者更好的选择:

async Task<string> TestTask()
{
    await Task.Delay(2000).ConfigureAwait(false);

    return "TestTask";
}

请注意,您的TaskCaller实际上会返回空Task。这显然是一个错误。

此外:不要通过Task.Wait()Task.Result

阻止任务

答案 1 :(得分:0)

我在您的代码中做了一些更改

public void makeStringMultimapRequest(final Multimap<String, String> params) {
        StringRequest stringRequest = new StringRequest(methodType, link, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                prgDialog.dismiss();
                try{
                    responseListenerVolley.onSuccess(new JSONObject(response));
                }
                catch (Exception e){
                    Log.d(TAG, "makeStringRequest " + "onResponse() Exception = [" + e + "]");
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                errorListenerVolley.onError(error.toString());
                prgDialog.dismiss();

            }
        }
        ) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                return (Map<String, String>) params;
            }

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> header = new HashMap<>();
                header.put("Authorization", "Bearer 1DRYSS__ACn2gh1--OBtBYrQClzpbV5c5xUa9K-cPx-6YBRQOdHxU9rhk2R60cmlPcI_uCj-Y3jnNo_ENbyis1KA5ONGkYR2J0COO7H_qC_1llOEgDdcY8fAHJG05C33EqeZUlEs1JprSk22OfoBGOf89b5TuZqCGHm3NLx_3CMJnCp9lR_EXqR0QFZk03owz-Y6hCovmrMP1ihYbnbngB95U5EOPWBkgQhTB__IWCt59aEsSMxdkSY3Xi_Bt7Vc");
                return header;
            }
        };
        stringRequest.setRetryPolicy(new DefaultRetryPolicy(MY_SOCKET_TIMEOUT_MS, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        // Adding request to request queue
        AppController.getInstance().getRequestQueue().add(stringRequest);
    }