我在界面中有一个ObservableCollection
,并且正在将它与RestApi-Request
一起使用。它具有一些Await函数,并且必须是异步的。但是有一个错误。
以下是界面:
public interface IDbConnection
{
ObservableCollection<Einkauf> GetEinkauf();
}
这是该类正在使用的部分:
public partial class RestView : IDbConnection
{
private ObservableCollection<Einkauf> _einkauf;
private const string Url = "http://localhost:3003/einkauf";
private HttpClient _client = new HttpClient();
public RestView ()
{
InitializeComponent ();
}
public async ObservableCollection<Einkauf> GetEinkauf()
{
var content = await _client.GetStringAsync(Url);
var einkauf = JsonConvert.DeserializeObject<List<Einkauf>>(content);
_einkauf = new ObservableCollection<Einkauf>(einkauf);
speisenListe.ItemsSource = _einkauf;
return _einkauf;
}
}
GetEinkauf
带有下划线,并显示:
CS1983 C# The return type of an async method must be void, Task or Task<T>
有人知道如何解决此问题吗?
答案 0 :(得分:2)
public interface IDbConnection
{
Task<ObservableCollection<Einkauf>> GetEinkauf();
}
public async Task<ObservableCollection<Einkauf>> GetEinkauf()
{
...
}
答案 1 :(得分:1)
如果应该将GetEinkauf
实现为异步方法,则应将其返回类型更改为Task<ObservableCollection<Einkauf>>
,并将其名称更改为GetEinkauf Async 以遵循命名规则异步方法的约定:
public interface IDbConnection
{
Task<ObservableCollection<Einkauf>> GetEinkaufAsync();
}
public async Task<ObservableCollection<Einkauf>> GetEinkaufAsync()
{
var content = await _client.GetStringAsync(Url);
var einkauf = JsonConvert.DeserializeObject<List<Einkauf>>(content);
_einkauf = new ObservableCollection<Einkauf>(einkauf);
speisenListe.ItemsSource = _einkauf;
return _einkauf;
}
然后您可以从任何标记为await
的方法中async
来使用该方法:
var collection = await GetEinkaufAsync();
如果另一个类出于某种原因以同步方式实现IDbConnection
接口,则可以使用Task.FromResult
方法返回Task<ObservableCollection<Einkauf>>
:
public class SomeOtherClass : IDbConnection
{
public Task<ObservableCollection<Einkauf>> GetEinkaufAsync()
{
return Task.FromResult(new ObservableCollection<Einkauf>());
}
}