【问题标题】:Async await call does not return异步等待调用不返回
【发布时间】:2017-10-06 17:23:48
【问题描述】:

我有一个问题,我调用了一个异步方法,但调用没有返回。我认为它是线程竞赛。我该如何正确地写这个?

从这里开始。我首先调用了一个名为“GetCachedValuesAsync”的异步方法

public void OnNavigatingTo(NavigationParameters parameters)
    {
        Task.Run(async () =>
        {
            await GetCachedValuesAsync();
            ClipRefernce = GenerateRefernce(clips);
        });
    }

这是 GetCachedValueAsync 的方法签名

public async Task  GetCachedValuesAsync()
    {
        try
        {
            clips = await BlobCache.LocalMachine.GetObject<List<Clip>>("clips");
        }
        catch (KeyNotFoundException ex)
        {
            clips = new List<Clip>();
        }
    }

我没有收到从 BlobCache 返回的调用,BlobCahce 方法是名为 akavache 的库的一部分。

代码也没有命中:ClipRefernce = GenerateRefernce(clips);

感谢您的帮助

编辑 1

这是 GenerateReference 方法。

public string  GenerateRefernce(List<Clip> clips)
    {
        string refernce = "";
        if(clips.Count > 0)
        {
            var clip = clips.LastOrDefault();
            refernce = String.Format("Ref {0:yyyy}/{1}",DateTime.Now , clip.ClipId + 1);
        }
        else{
            refernce = String.Format("Ref {0:yyyy}/{1}", DateTime.Now, 1);
        }
        return refernce;
    }

【问题讨论】:

  • 你有什么异常吗?
  • @Amit:我没有得到任何异常
  • @Amit :我已经进行了这些更改。但这并不能解决问题
  • 这可能会有所帮助。 stackoverflow.com/questions/31425210/…
  • 虽然问题听起来完全一样,但我已经尝试了页面中的两种解决方案,但都不起作用

标签: c# asynchronous async-await akavache


【解决方案1】:

您需要像这样从Task.Run 中删除同步方法:

public void OnNavigatingTo(NavigationParameters parameters)
{
    Task.Run(async () =>
    {
        await GetCachedValuesAsync();
    });

    ClipRefernce = GenerateRefernce(clips);
}

public async Task  GetCachedValuesAsync()
{
    try
    {
        clips = await BlobCache.LocalMachine.GetObject<List<Clip>>("clips");
    }
    catch (KeyNotFoundException ex)
    {
        clips = new List<Clip>();
    }
}

【讨论】:

  • 没有任何解释,这不是很有帮助。在不知道 GenerateReference 做什么的情况下,我完全不知道为什么这会有所帮助。
  • 这听起来像是一个幸运的猜测,除非您想详细说明为什么这会有所帮助?
  • @JonSkeet ,我添加了 GenerateRefernce 方法
猜你喜欢
  • 2021-06-30
  • 2020-03-13
  • 1970-01-01
  • 2021-12-01
  • 2020-01-02
  • 2012-05-04
  • 2021-11-01
  • 2019-09-29
  • 2014-11-26
相关资源
最近更新 更多