簡體   English   中英

Xamarin.Forms GetAsync停止調試,沒有錯誤

[英]Xamarin.Forms GetAsync stops debugging without error

我的MainPage后台代碼:

private void Button_Clicked(object sender, EventArgs e)
{
    Query().Wait();
    App.Current.MainPage = new Categories();
}

public async Task Query()
{
    restaurantsClient = (App.Current as App).restaurantsClient;

    try
    {
        var restaurantsNames = await restaurantsClient.GetCatalogsAsync(1);
    }
    catch (Exception ex)
    {
        var x = 0;
    }
}

我也嘗試過此代碼,但是沒有用,發生同樣的問題:

async static Task GetRequest(String URL)
{
    using (HttpClient client = new HttpClient())
    {
        // As soon as I try to step over (or even into) this next line, it crashes.
        using (HttpResponseMessage response = await client.GetAsync(URL))
        {
            using (HttpContent content = response.Content)
            {
                string data = await content.ReadAsStringAsync();

                Console.WriteLine(data);
            }
        } 
    }
}

C#中的Rest-API:

var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);

當項目到達此行時,它只是死掉而沒有顯示任何錯誤。 如果我在瀏覽器中執行此操作,它將正常工作。 該API在我的PC上本地運行(我正在使用Conveyor公開API)。

好的,我制作了一個視頻,以更好地了解我在說什么: https : //youtu.be/ONKTipPsEXI如您所見,在單擊響應行中的下一步后,停止執行其余代碼。

這是因為您在UI線程上使用TaskButton.Clicked .Wait() (UI線程上處理了Button.Clicked事件),從而導致死鎖。 任務正在等待UI線程給予控制權,而UI線程正在等待任務完成 解決方案是在事件處理程序中添加async修飾符,並使用await Query()代替Query().Wait()

private async void Button_Clicked(object sender, EventArgs e)
{
    await Query();
    App.Current.MainPage = new Categories();
}

我還建議您閱讀Stephen Cleary的 這篇文章 此外,他制作了關於C#任務的精彩系列( A Tour of Task )。

更新:

在OP的問題更新並在此答案的評論中進行討論之后; 他認為這是有問題的,因為他可以在GetCatalogsAsync(int, CancellationToken)結束之前到達GetCatalogsAsync(int)的結尾。 這是完全自然的,是可以預期的。 解:

public async System.Threading.Tasks.Task<CatalogsInCategory> GetCatalogsAsync(int id)
{
    return await GetCatalogsAsync(id, System.Threading.CancellationToken.None);
}

暫無
暫無

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

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