我想使用异步io与分布式哈希服务器进行套接字通信。环境是C#3.5,但如果需要可以使用4.0。
假设我发出以下异步命令(伪代码):
socket.set_asynch("FOO","bar");
string rc = socket.get_asynch("FOO");
由于异步io使用系统线程池,因此这两个命令可以在两个上运行 不同的线程。我怎样才能确保rc等于“bar”?即第一个命令 在第二个命令发出之前发出?
谢谢!
答案 0 :(得分:6)
您可以围绕Task<T> class(任务并行库)设计API:
class DistributedHashTable
{
public Task SetAsync(string key, string value);
public Task<string> GetAsync(string key);
}
两种方法都将使用异步IO来执行相应的操作,并设置返回的任务&lt; T&gt;。在操作完成时完成。
然后你可以像这样同步使用你的课程:
var dht = new DistributedHashTable(...);
dht.SetAsync("FOO", "bar").Wait();
Console.WriteLine(dht.GetAsync("FOO").Result);
或像这样异步:
var dht = new DistributedHashTable(...);
dht.SetAsync("FOO", "bar")
.ContinueWith(t => dht.GetAsync("FOO"))
.Unwrap()
.ContinueWith(t => {
Console.WriteLine(t.Result);
});
或异步使用Async CTP,如下所示:
var dht = new DistributedHashTable(...);
await dht.SetAsync("FOO", "bar");
Console.WriteLine(await dht.GetAsync("FOO"));