簡體   English   中英

使用Task.ContinueWith時,並非所有代碼路徑都返回值。

[英]Not all code paths return a value when using Task.ContinueWith

所以我有這個函數,在所有if-else都有一個返回值,但仍然出現Compilation錯誤:

並非所有代碼路徑都返回值

public async Task<bool> DeletePost(string update_id, string authId)
{
    if (Utility.NetworkStatus.HasInternetAccess)
    {
        await APIs.DeletePost.DeletePostAPI(update_id, authId).ContinueWith((t) =>
        {
            if (t.Status == TaskStatus.RanToCompletion)
            {
                if (t.Result != null)
                {
                    return t.Result.status == 200;
                }
                else
                {
                    return false;
                    //empty result, API failed
                    //not implemented
                }
            }
            else
            {
                return false;
                //task failed 
                //not implemented
            }
        });
    }
    else
    {
        return false;
        //no network
        //not implemented
    }
}

誰能告訴我我在做什么錯?

是。 您不返回DeletePostAPI的延續結果:

public async Task<bool> DeletePost(string update_id, string authId)
{
    if (Utility.NetworkStatus.HasInternetAccess)
    {
        return await APIs.DeletePost.DeletePostAPI(update_id, authId).ContinueWith((t) =>
        {
            if (t.Status == TaskStatus.RanToCompletion)
            {
                if (t.Result != null)
                {
                    return t.Result.status == 200;
                }
                else
                {
                    return false;
                    //empty result, API failed
                    //not implemented
                }
            }
            else
            {
                return false;
                //task failed 
                //not implemented
            }
        });
    }
    else
    {
        return false;
        //no network
        //not implemented
    }
}

如果完全刪除ContinueWith而使用更現代的await則代碼將變得更加簡單:

public async Task<bool> DeletePost(string update_id, string authId)
{
  if (Utility.NetworkStatus.HasInternetAccess)
  {
    try
    {
      var result = await APIs.DeletePost.DeletePostAPI(update_id, authId);
      if (result != null)
      {
        return result.status == 200;
      }
      else
      {
        return false;
        //empty result, API failed
        //not implemented
      }
    }
    catch
    {
      return false;
      //task failed 
      //not implemented
    }
  }
  else
  {
    return false;
    //no network
    //not implemented
  }
}

您需要返回等待的返回值。 所以:

bool result = await APIs.DeletePost.DeletePostAPI(update_id, authId).ContinueWith((t) =>
                {
                    if (t.Status == TaskStatus.RanToCompletion)
                    {
                        if (t.Result != null)
                        {
                            return t.Result.status == 200;
                        }
                        else
                        {
                            return false;
                            //empty result, API failed
                            //not implemented
                        }
                    }
                    else
                    {
                        return false;
                        //task failed 
                        //not implemented
                    }
                });
return result;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM