gpt4 book ai didi

c# - 如何使用 Task.Run(Action)

转载 作者:可可西里 更新时间:2023-11-01 08:20:29 25 4
gpt4 key购买 nike

我正在尝试创建一个接受 TcpClient 连接并在客户端连接后执行任务“ConnectedAction”的方法。我在尝试创建新任务以运行委托(delegate)“ConnectedAction”时收到编译错误。

Argument 1: cannot convert from 'void' to 'System.Func'

我相信这个错误是因为该方法正在尝试运行“ConnectedAction”方法并将 void 返回给 Task.Run 参数。

如何让任务运行“ConnectedAction”委托(delegate)?

class Listener
{
public IPEndPoint ListenerEndPoint {get; private set;}
public int TotalAttemptedConnections { get; private set; }
public Action<TcpClient> ConnectedAction { get; private set; }

public Listener(IPEndPoint listenerEndPoint, Action<TcpClient> connectedAction)
{
ConnectedAction = connectedAction;
ListenerEndPoint = listenerEndPoint;

Task.Factory.StartNew(Listen, TaskCreationOptions.LongRunning);
}

private void Listen()
{
TcpListener tcpListener = new TcpListener(ListenerEndPoint);
tcpListener.Start();

while (true)
{
TcpClient tcpClient = tcpListener.AcceptTcpClient();
TotalAttemptedConnections++;

//Error here
Task.Run(ConnectedAction(tcpClient));
}
}
}

最佳答案

你应该写:

Task.Run(() => ConnectedAction(tcpClient));

这将创建一个不带参数的 lambda 函数,并将使用正确的参数调用您指定的函数。 lambda 被隐式包装到 Task.Run 参数所需的委托(delegate)类型中。

您编写的代码会调用函数,然后尝试将函数的返回值转换为委托(delegate)。

关于c# - 如何使用 Task.Run(Action<T>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14970954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com