我有一个问题,我调用异步方法,并且调用不返回。我认为它是一个线程种族。我该怎么写得正确?
这是它开始的地方。我首先调用一个名为“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;
}
答案 0 :(得分:0)
您需要从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>();
}
}