Нужно чтобы клиент некой библиотеки подключался через соксы, библиотека написана на C#.
Но сначала я хотел переписать обработчик(по умолчанию) на F# и передать в свойство.
Вобщем код:
// Обработчик по умолчанию
static async Task<TcpClient> DefaultTcpHandler(string host, int port)
{
var tcpClient = new TcpClient();
await tcpClient.ConnectAsync(host, port);
return tcpClient;
}
// Инициализация класса Client с обработчиком по умолчанию
public TcpFactory TcpHandler { get; set; } = DefaultTcpHandler;
public delegate Task<TcpClient> TcpFactory(string host, int port);
Обработчик переписанный на F#
let defaultTcpHandler (host : string, port : int) : Async<TcpClient> =
async {
let tcpClient = new TcpClient()
let! _ = tcpClient.ConnectAsync(host, port) |> Async.AwaitTask
return tcpClient
}
// Инициализация клиента и установка обработчика через сеттер
let client = new Client(...)
client.TcpHandler <- defaultTcpHandler
Ошибка в несвовместимости типов в последней строчке кода:
This expression was expected to have type
'Client.TcpFactory'
but here has type
'string * int -> Async<TcpClient>'