我有一个问题,我调用了一个异步方法,并且该调用未返回。我认为它是线程的竞赛。我该如何正确写呢?
从这里开始。我首先调用一个称为“ 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
这是GenerateRefernce方法。
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;
}
最佳答案
您需要像这样从Task.Run
中删除sync方法:
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>();
}
}