我必须使用非静态DoStuffOnlyOnceAsync
方法,该方法试图使用AsyncLazy
进行调用,但出现错误。
如何调用非静态方法?
字段初始化器无法引用非静态字段,方法或属性'TestClass.DoStuffOnlyOnceAsync()'
using System;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
namespace Registry
{
public class AsyncLazy<T> : Lazy<Task<T>>
{
public AsyncLazy(Func<T> valueFactory) : base(() => Task.Run(valueFactory)) { }
public AsyncLazy(Func<Task<T>> taskFactory) : base(() => Task.Run(() => taskFactory())) { }
public TaskAwaiter<T> GetAwaiter() { return Value.GetAwaiter(); }
}
public class TestClass
{
private AsyncLazy<bool> asyncLazy = new AsyncLazy<bool>(async () =>
{
await DoStuffOnlyOnceAsync();
return true;
});
public TestClass() { }
public async Task DoStuffOnlyOnceAsync()
{
await Task.FromResult(false);
}
}
}
答案 0 :(得分:1)
限制是字段初始化器不能调用任何非静态方法。对于任何字段初始值设定项都是如此,与AsyncLazy<T>
或async
无关。
要解决此问题,请在构造函数中初始化字段:
public TestClass()
{
asyncLazy = new AsyncLazy<bool>(async () =>
{
await DoStuffOnlyOnceAsync();
return true;
});
}