【发布时间】:2014-01-17 21:04:31
【问题描述】:
我正在阅读Exam Ref 70-483: Programming in C# 这本书,并给出了以下代码示例:
清单 1-19
public Task SleepAsyncA(int millisecondsTimeout)
{
return Task.Run(() => thread.Sleep(millisecondsTimeout);
}
public Task SleepAsyncB(int millisecondsTimeout)
{
TaskCompletionSource<bool> tcs = null;
var t = new Timer(delegate { tcs.TrySetResult(true); }, -1, -1);
tcs = new TaskCompletionSource<bool>(t);
t.Change(millisecondsTimeout, -1);
return tcs.Task;
}
下面的段落说明了这一点:
SleepAsyncA方法使用线程池中的一个线程,而 睡眠。然而,第二种方法具有完全 不同的实现,在等待时不占用线程 要运行的计时器。第二种方法为您提供了可扩展性。
为什么 A 响应式但 B 可扩展?
【问题讨论】:
-
你能用你认为“响应式”的意思来编辑你的问题吗?
-
其实我也有点不确定。我能想到的唯一例子是 UI 没有被线程锁定。
-
这是本书的完整问题吗?有解释吗?第一种情况会使客户端 UI 更具响应性,第二种情况会使 Web 应用程序(服务器)更具可扩展性,但也会使客户端 UI 更具响应性,而第一种情况永远不会使 Web 应用程序更具响应性,并且会降低其可扩展性。
-
@PauloMorgado 这不是一个问题,而是直接从中提取了报价和样本。
-
@BanksySan,我能够下载该部分的示例章节(使用异步和等待)并阅读该部分多次。我还认为作者突然提出了可扩展性问题。整篇文章似乎只谈论客户端 UI,没有任何解释地介绍了服务器可扩展性。
标签: c# .net multithreading async-await scalability