我无法调用我的异步方法...我想调用该方法,以便我可以使用该方法内部变量中的值。 注意:ViewDetailsAsync
来自网络服务。
这就是我所拥有的:
namespace TilesAndNotifications.Models
{
public class PrimaryTile
{
public async void GetTileData()
{
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
string name= string.Empty;
string description = string.Empty;
string type= string.Empty;
var res = await client.ViewDetailsAsync();
name= res.NameView;
description = res.DescriptionView;
type= res.TypeView;
}
public string CurrentName { get; set; } = "John Doe";
public string CurrentDescription { get; set; } = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.";
public string CurrentType { get; set; } = "Employee";
}
}
我想要完成的事情
public string CurrentName { get; set; } = GetTileData.name;
public string CurrentDescription { get; set; } = GetTileData.description
public string CurrentType { get; set; } = GetTileData.type;
但我不确定是从异步方法中提取这些信息......我知道这可能是基本的,但我似乎无法得到它。
答案 0 :(得分:1)
您不能使用属性默认值来执行此操作,并且由于类构造不是异步的,因此除非您实现同步等待,否则您将无法在构造函数上执行此操作:
public PrimaryTile()
{
var titleData = GetTitleData().Result;
}
无论如何,这是一个非常非常糟糕的主意,因为如果你不小心实现异步/线程代码,它可能会在某些条件下产生死锁 强>
可能您需要重新考虑您的架构并制定更好的解决方案。
答案 1 :(得分:1)
您可以使用async
方法设置属性:
public async Task GetTileDataAsync()
{
...
var res = await client.ViewDetailsAsync();
CurrentName = res.NameView;
CurrentDescription = res.DescriptionView;
CurrentType = res.TypeView;
}
当然,在使用这些属性之前,调用代码必须await
从GetTileDataAsync
返回的任务。