有没有办法创建一个返回Task的属性<Delegate>?

问题描述 投票:0回答:1

我希望能够拥有一个 getter 属性,该属性将采用

IService
的实例并返回一个称为异步的委托。

例如:

public class DelAccessor
{
    public Func<IService, Task<Delegate>> Getter { get; set; }
}

我希望能够像这样调用它

await a.Getter(service);

我正在努力寻找正确的语法

new DelAccessor()
{
    Getter = service => (Func<string, Task<object>>)((t) =>
            {
                var v = new object();

                // perform async call
                return v;
            });

我收到编译器错误

无法将类型

Func<string, Task<object>>
隐式转换为
Task<Delegate>

定义可以称为异步的 getter 的正确方法是什么?

c# asynchronous async-await
1个回答
0
投票

这可能会起作用。您有一个用于

delegate
Task<string>
,称为
ReadFileDelegate
(为了在示例中清晰起见,将其重命名)和
delegate
类型的
ReadFileDelegate
的只读属性。

public class DelAccessor
{
    public delegate Task<string> ReadFileDelegate(string name);

    public ReadFileDelegate ReadFile => ReadFileText;

    private async Task<string> ReadFileText(string name)
    {
        var str = await File.ReadAllTextAsync(name);
        return str;
    }
}

用途:

var d = new DelAccessor();
var text = d.ReadFile(@"C:\test.txt");

如果您愿意,可以移动该函数,然后在另一个类中设置

ReadFile
属性(如果将其更改为:

// you could also use set (instead of init) depending on your needs
public ReadFileDelegate ReadFile { get; init; }

实际的

ReadFileText
功能可以移动到任何地方。

© www.soinside.com 2019 - 2024. All rights reserved.