我需要的是一个按顺序执行异步操作的类。
class FooSocket
{
private Socket _Socket;
// Message is a class that wraps a byte array.
public Task<Message> Receive() { /*Bla...*/ };
public Task<int> Send(Message message) { /*Bla...*/ };
}
如果我按顺序调用发送、接收和发送,我需要先发送,并将剩余的接收和发送操作排队,直到第一个接收完成。
我尝试在课堂上创建一个主要任务领域并遵循MainTask = MainTask.ContinueWith(...)
一种方法。我什至写了一个名为 Sequencer 的类,它正是这样做的,但不知何故感觉不对,在延续和其他东西中创建嵌套任务(使用 Task.Factory.FromAsync 方法)。
我还尝试做一些事情,比如排队 TaskCompletionSource 对象并在我的 Receive/Send 方法中返回它们的任务,在一个单独的线程上以无限循环检查队列,但由于我将拥有大约 200k 的 FooSocket 实例,每个线程也感觉失策。如果我把它变成一个线程池,我会得出这个“线程池不应该用于长时间运行的操作”的规则。
我感觉很接近,但不确定订购这些工作的最有效方式是什么。