【发布时间】:2013-08-01 06:53:34
【问题描述】:
我学会了在我的存储库中延迟加载属性。现在我想这样做,但我还需要从网页加载一些东西(使用 Httpclient),这意味着我的属性将是异步的。
public async Task<List<NewsModel>> News
{
get
{
if (_news == null)
{
CacheProvider cache = new CacheProvider();
object cachedNews = cache.Get("news");
if (cachedNews == null)
{
var client = new HttpClient();
// await HttpResponse
}
}
return _news;
}
set
{
_news = value;
}
}
然而,视觉工作室告诉我
“修饰符 async 对此项无效”
同时突出显示第一行中的“新闻”一词。
可以这样做吗?还是我必须写一个单独的方法?
【问题讨论】:
-
我认为您有 System.Threading.Tasks 的 using 语句?另外,这是针对哪个 .NET 框架?是银光吗? -- 没关系,只是看到这是一个属性。您需要将其转换为方法。
-
在我看来,
News属性直观上会具有List<NewsModel>类型,Task<>装饰在这里看起来并不自然。为什么你觉得有必要暴露Task<>的本质? -
@AndrewCoonce 其实如果他想写一个异步方法,他肯定要写成返回任务。
-
因为 Visual Studio 告诉我这样做 :( 我第一次在 C# 中处理异步。
-
@LasseV.Karlsen:是的,但这不是一种方法……这是一种属性。我想我担心的是最终用户不会期待副作用、异步操作等......他们期待新闻项目的枚举。
标签: c# asynchronous