C# 如何创建等待类?
可能重复:C# 如何创建等待类?,c#,windows-runtime,async-await,C#,Windows Runtime,Async Await,可能重复: 我有一个班级的例子,从互联网上收集了一些关于创作的信息 public class Example { string information; public Example() { //Pull information } } public async void SetupSomething() { Example ex = new Example(); await ex; // Do somethi
我有一个班级的例子,从互联网上收集了一些关于创作的信息
public class Example
{
string information;
public Example()
{
//Pull information
}
}
public async void SetupSomething()
{
Example ex = new Example();
await ex;
// Do something with ex
}
现在我想让示例变得可以期待,因为在创建后继续部分之前创建示例是很重要的
public class Example
{
string information;
public Example()
{
//Pull information
}
}
public async void SetupSomething()
{
Example ex = new Example();
await ex;
// Do something with ex
}
我怎样才能做到这一点呢?好吧,构造函数应该等到它完成了它的工作。毕竟,用于创建它的线程来自调用它的方法 然而,我认为非常重要的是,向我们展示构造函数在做什么。它很有可能在某个地方调用某个启动另一个线程的东西,而不是等待它解决,从而使构造函数返回,而不具有您所谈论的所有“信息”
可能类似于:您可以这样做,但我认为这不是一个好方法,因为在开始使用该实例之前,没有任何东西强迫
等待
我认为一个好主意是创建创建对象的静态异步方法。比如:
class Example
{
private Example()
{
}
private async Task InitializeAsync()
{
// get the required data asynchronously here
}
public static async Task<Example> CreateAsync()
{
var result = new Example();
await result.InitializeAsync();
return resul;
}
}
类示例
{
私人示例()
{
}
专用异步任务InitializeAsync()
{
//在此处异步获取所需的数据
}
公共静态异步任务CreateAsync()
{
var result=新示例();
等待结果。初始化同步();
返回结果;
}
}
只有向下投票,因为它实际上没有回答问题。@问题是,当构造涉及wait
ing时,如何创建类。由于构造函数不能是异步的,所以可以使用工厂方法。在OP给出的示例中(var ex=new example();await ex;
),您没有回答如何创建可等待的类,而是回答了如何绕过不可等待的构造函数。这可能不是你的错;也许OP放得不好。要创建一个可等待的类,您只需要有一个GetAwaiter()方法。我投票赞成重新打开,因为这个问题实际上可以在它的原始上下文中得到回答,而与异步构造函数无关。正如svick所建议的,我不认为这是一个很好的方法,但老实说。。。除了有点奇怪而且读起来不太好之外,我无法解释为什么。但你确实可以做到。有一篇很好的博客文章回答了真正的问题: