Jac*_*cko 1 c# sockets asynchronous system threadpool
我想使用异步io与分布式哈希服务器进行套接字通信.环境是C#3.5,但如果需要可以使用4.0.
假设我发出以下异步命令(伪代码):
socket.set_asynch("FOO","bar");
string rc = socket.get_asynch("FOO");
Run Code Online (Sandbox Code Playgroud)
由于异步io使用系统线程池,因此这两个命令可以在两个不同的线程上运行.我怎样才能确保rc等于"bar"?即在第二个命令发出之前发出第一个命令?
谢谢!
您可以围绕Task <T>类(任务并行库)设计API :
class DistributedHashTable
{
public Task SetAsync(string key, string value);
public Task<string> GetAsync(string key);
}
Run Code Online (Sandbox Code Playgroud)
这两种方法都将使用异步IO来执行相应的操作,并在操作完成时将返回的Task <T>设置为已完成.
那么你可以像这样同步使用你的类:
var dht = new DistributedHashTable(...);
dht.SetAsync("FOO", "bar").Wait();
Console.WriteLine(dht.GetAsync("FOO").Result);
Run Code Online (Sandbox Code Playgroud)
或者像这样异步:
var dht = new DistributedHashTable(...);
dht.SetAsync("FOO", "bar")
.ContinueWith(t => dht.GetAsync("FOO"))
.Unwrap()
.ContinueWith(t => {
Console.WriteLine(t.Result);
});
Run Code Online (Sandbox Code Playgroud)
或异步使用Async CTP,如下所示:
var dht = new DistributedHashTable(...);
await dht.SetAsync("FOO", "bar");
Console.WriteLine(await dht.GetAsync("FOO"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
534 次 |
| 最近记录: |