我正在开展一个多任务网络项目,我是新手Threading.Tasks.我实现了一个简单的Task.Factory.StartNew(),我想知道我该怎么做Task.Run()?
这是基本代码:
Task.Factory.StartNew(new Action<object>(
(x) =>
{
// Do something with 'x'
}), rawData);
Run Code Online (Sandbox Code Playgroud)
我System.Threading.Tasks.Task在对象浏览器中查看,我找不到Action<T>类似的参数.只有Action这需要void参数,没有类型.
只有两件事情similiar:static Task Run(Action action)和static Task Run(Func<Task> function),但不能发布与两个参数(一个或多个).
是的,我知道我可以,但创建一个简单的扩展方法,我的主要问题是,我们可以把它写在一行用Task.Run()?
我对async-awaits,pools和threads 感到困惑.主要问题始于这个问题:"当我必须处理10k套接字I/O时,我该怎么办?" (又名C10k问题).
Queue和多个Threads来处理所有传入数据的线程来创建自定义池化架构.这是关于理解一个伟大的经验
thread-safety和multi-threading但是thread是一个矫枉过正
与async-await时下.async-await但我无法理解为什么"async和await关键字不会导致创建额外的线程." (来自MSDN)?我认为必须要做一些thread像BackgroundWorker这样的工作.ThreadPool它看起来像我的第一个自定义池.现在,我认为我应该有其他人对处理C10k感到困惑.我的项目是我的游戏项目的专用(中央)服务器,它是集线器/大厅服务器,如MCSG的大厅或COD的配对服务器.我将进行登录操作,游戏服务器命令执行/查询和服务信息(如版本,补丁).
最后一部分可能对我的项目更具体,但我真的需要一些关于多个(重)数据处理的真实世界解决方案的好建议.
(也就是说,1k-10k-100k连接处理取决于服务器硬件,但这是一般性问题)
关键点:在任务并行库和ThreadPool之间选择(MSDN博客)
[附加]想要了解我们在谈论什么的好(基本)事物:
我有一个处理制表符开关的JavaScript文件.这是来源:
var tCount = 0;
function SwitchToTab(id) {
if (id < 0 || id > tCount) { id = 0; }
for (var i = 0; i < tCount; i++) { document.getElementById("tab" + i).className = ""; }
document.getElementById("tab" + id).className = "active";
for (var i = 0; i < tCount; i++) { document.getElementById("area" + i).style.display = "none"; }
document.getElementById("area" + id).style.display = "";
}
function InitializeTabs(initialTabId, tabsCount) {
tCount = tabsCount;
SwitchToTab(initialTabId);
}
Run Code Online (Sandbox Code Playgroud)
我试图尽可能地缩短它:
<script src="Resources/Tabs.js">InitializeTabs(0, 4);</script>
Run Code Online (Sandbox Code Playgroud)
它不起作用,但如果我将它们分开,它会起作用:
<script src="Resources/Tabs.js"></script> …Run Code Online (Sandbox Code Playgroud) 我正在使用块实现db模型,不要混淆处理和任何相关的非托管资源需求,但我想知道(基本上)当db模型不使用块作用域时会发生什么.问题不在于处置或记忆(我知道,它会自动为我们做).关于SQL连接和相关实例的问题.
所以,这是一个简单的(ActionResult)示例:
Account account;
using(AccountsModel accountModel = new AccountsModel())
{
account = accountsModel.Accounts.FirstOrDefault(x=> x.Username == username);
if(account == null) return;
account.Name = name;
accountsModel.SaveChanges();
}
ViewBag.Name = account.Name; // Is it safe?
return View();
Run Code Online (Sandbox Code Playgroud)
问题是:" 使用范围访问模型的Account类实例(由提供者提供AccountsModel)是否安全?"
注意:我知道,我不能/不能在表格上执行任何更新超出范围.
我试图创建一个不可见的可点击按钮,但是当我点击它时,没有任何反应......
我用来使按钮不可见的代码:
button1.Visible = false;
Run Code Online (Sandbox Code Playgroud)
我想在点击按钮时显示图片(在它被隐藏之后)
c# ×4
asp.net ×1
asynchronous ×1
button ×1
html ×1
javascript ×1
lambda ×1
scope ×1
sockets ×1
sql-server ×1
task ×1
threadpool ×1