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
astatic
方法。我猜你为什么要避免这样做是有原因的。该方法是否依赖于其他实例成员?
public TestClass()
{
asyncLazy = new AsyncLazy<bool>(async () =>
{
await DoStuffOnlyOnceAsync();
return true;
});
}