繁体   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