【问题标题】:Multitasking and Multithreading in silverlightSilverlight 中的多任务和多线程
【发布时间】:2011-01-28 23:05:15
【问题描述】:
我有一个 Silverlight 应用程序,其中我有多个发送到服务器的请求。我希望所有这些请求都同步,即通过队列或多任务处理。这样做的最佳方法是什么。Plz在 silverlight 中提供一些 io 可以这样做的示例。
【问题讨论】:
标签:
asp.net
wcf
silverlight
silverlight-3.0
【解决方案1】:
看看 ASYNC CTP 框架:
http://msdn.microsoft.com/en-us/vstudio/gg316360
它提供了处理/同步异步请求的简单方法,例如以下示例:
public async void AsyncWebRequestGetResponse()
{
var response = await WebRequest.Create("http://www.weather.gov").GetResponseAsync();
var stream = response.GetResponseStream();
Console.WriteLine("First byte: {0}", stream.ReadByte().ToString("X2"));
}
或
public async void AsyncForEach()
{
var uris = new List<Uri> { new Uri("http://www.weather.gov"), new Uri("http://www.weather.gov/climate/"), new Uri("http://www.weather.gov/rss/") };
foreach (var uri in uris)
{
WriteLinePageTitle(await new WebClient().DownloadStringTaskAsync(uri));
}
}
经典的方式是使用像 AutoResetEvent 这样的 WaitHandles 来同步请求。
【解决方案2】:
响应式扩展也可能是一个有效的选项。这是一个很好的article,它显示了将它用于对 WCF 服务的异步调用。
【解决方案3】:
关键是你无法控制请求的顺序,默认情况下你只能向同一个域发出两个请求,所以这意味着你需要在客户端上构建一些东西才能发送请求你想要执行的顺序,当然 Silverlight 只支持 BasicHttpBinding 意味着你没有得到有序的消息属性。