我知道论坛里有很多类似的问题,但我没有找到和我一样的问题。请查看下面的代码。
product
永远不会达到return v语句。我需要TaskCaller的结果来做更多的过程。
答案 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);
}