C# 如何使用AsyncLazy调用非静态方法

C# 如何使用AsyncLazy调用非静态方法,c#,asynchronous,C#,Asynchronous,我必须使用非静态的DoStuffOnlyOnceAsync方法,我试图使用AsyncLazy调用该方法,但我遇到了错误 如何调用非静态方法 字段初始值设定项无法引用非静态字段、方法或属性“TestClass.DoStuffOnlyOnceAsync()” 使用系统; 使用System.Runtime.CompilerServices; 使用System.Threading.Tasks; 命名空间注册表 { 公共类:Lazy { 公共异步(Func valueFactory):基(()=>Task

我必须使用非静态的
DoStuffOnlyOnceAsync
方法,我试图使用
AsyncLazy
调用该方法,但我遇到了错误

如何调用非静态方法

字段初始值设定项无法引用非静态字段、方法或属性“TestClass.DoStuffOnlyOnceAsync()”

使用系统;
使用System.Runtime.CompilerServices;
使用System.Threading.Tasks;
命名空间注册表
{
公共类:Lazy
{
公共异步(Func valueFactory):基(()=>Task.Run(valueFactory)){}
公共异步(Func taskFactory):基(()=>Task.Run(()=>taskFactory()){}
公共任务等待器GetAwaiter(){return Value.GetAwaiter();}
}
公共类TestClass
{
private AsyncLazy AsyncLazy=新建AsyncLazy(异步()=>
{
等待DoStuffOnlyOnceAsync();
返回true;
});
公共TestClass(){}
公共异步任务DoStuffOnlyOnceAsync()
{
等待任务。FromResult(false);
}
}
}

限制是字段初始值设定项不能调用任何非静态方法。这适用于任何字段初始值设定项,与
AsyncLazy
async
无关

要修复此问题,请在构造函数中初始化字段:

public TestClass()
{
  asyncLazy = new AsyncLazy<bool>(async () =>
  {
    await DoStuffOnlyOnceAsync();
    return true;
  });
}
publictestclass()
{
asyncLazy=新建asyncLazy(异步()=>
{
等待DoStuffOnlyOnceAsync();
返回true;
});
}

猜测您问题中的代码与您实际使用的代码不同是否正确?因为如果是这样的话,您可以将
DoStuffOnlyOnceAsync
a
static
方法。我猜你为什么要避免这样做是有原因的。该方法是否依赖于其他实例成员?
public TestClass()
{
  asyncLazy = new AsyncLazy<bool>(async () =>
  {
    await DoStuffOnlyOnceAsync();
    return true;
  });
}