小编use*_*283的帖子

异步编程和多线程有什么区别?

我认为它们基本上是相同的 - 编写在处理器之间分割任务的程序(在具有2个以上处理器的机器上).然后我正在阅读https://msdn.microsoft.com/en-us/library/hh191443.aspx,其中说

异步方法旨在实现非阻塞操作.异步方法中的await表达式在等待的任务运行时不会阻止当前线程.相反,表达式将方法的其余部分作为延续进行注册,并将控制权返回给异步方法的调用者.

async和await关键字不会导致创建其他线程.异步方法不需要多线程,因为异步方法不能在自己的线程上运行.该方法在当前同步上下文上运行,并仅在方法处于活动状态时在线程上使用时间.您可以使用Task.Run将CPU绑定的工作移动到后台线程,但后台线程无助于正在等待结果可用的进程.

我想知道是否有人可以为我翻译成英文.它似乎区分了异步性(是一个单词?)和线程,并暗示你可以拥有一个具有异步任务但没有多线程的程序.

现在我理解异步任务的想法,例如pg上的示例.Jon Skeet的C#In Depth,第三版中的 467

async void DisplayWebsiteLength ( object sender, EventArgs e )
{
    label.Text = "Fetching ...";
    using ( HttpClient client = new HttpClient() )
    {
        Task<string> task = client.GetStringAsync("http://csharpindepth.com");
        string text = await task;
        label.Text = text.Length.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

async关键字的意思是" 这个功能,无论何时它被调用时,不会在这是需要的一切它的完成被称为它的呼叫后,上下文调用."

换句话说,将它写在某个任务的中间

int x = 5; 
DisplayWebsiteLength();
double y = Math.Pow((double)x,2000.0);
Run Code Online (Sandbox Code Playgroud)

,因为DisplayWebsiteLength()与"无关" xy将导致DisplayWebsiteLength()"在后台"执行,如

                processor 1                |      processor 2
-------------------------------------------------------------------
int …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing multithreading asynchronous async-await

180
推荐指数
2
解决办法
6万
查看次数

将C++指针视为内存地址的可接受程度如何?

当你学习C++时,或者至少当我通过C++ Primer学习它时,指针被称为它们指向的元素的"内存地址".我想知道这是多少.

例如,做两个元素*p1*p2拥有属性,p2 = p1 + 1或者p1 = p2 + 1 当且仅当它们在物理内存中相邻时?

c++ hardware pointers

41
推荐指数
5
解决办法
2226
查看次数

C#有一种很好的方法来迭代一个范围内的每个整数,减去其中的一个吗?

我的情况就像

// radius is an int[]
for ( int i = 0; i < radius.length; ++i )
{
   for ( int j = 0; j < radius.length; ++j ) 
   {
       // do some stuff
   }  
}
Run Code Online (Sandbox Code Playgroud)

除了我真的想要j通过范围0- radius.length,但跳过i:

{0,1,..., i-1, i+1, ..., radius.length}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法做到这一点,紧凑,优雅,高效,可读,甚至可能是正确的.

我打算如何做到这一点

for ( int i = 0; i < radius.length; ++i )
{
   for ( int j = 0; j < radius.length; )
   {
       // do some stuff
       j …
Run Code Online (Sandbox Code Playgroud)

.net c# algorithm loops

9
推荐指数
2
解决办法
317
查看次数

C#“事件循环”与 JavaScript“事件循环”相比如何?

当我听到 JavaScript 事件循环被描述为

\n\n
\n

“当无事可做时,检查队列。但只有在无事可做时才检查队列。”

\n
\n\n

在视频中https://www.youtube.com/watch?v=vMfg0xGjcOI

\n\n

例如,如果我的 JS 程序的总体是

\n\n
var x = 5.0;  \nsetTimeout(0,function(){console.log("Hey there!");});\nfor ( var i = 0; i < 10000; ++i ) x = Math.sqrt(x);\nconsole.log("x = " + x);\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后回调function(){console.log("Hey there!");}被放入队列中,因此将在之后执行,console.log("x = " + x);因为此时就没有什么可做的了。

\n\n

在 C# 中,据我了解(我并不真正理解),情况有所不同,因为“回调”的等效项不会等待无事可做,而是会中断其他进程(例如)。这就是我的解释

\n\n
\n

写入请求开始后一段时间,设备完成写入。它通过中断通知CPU。

\n\n

设备驱动程序\xe2\x80\x99s 中断服务例程(ISR) 响应中断。中断是 CPU 级别的事件,可暂时夺取 CPU 的控制权,使其脱离正在运行的任何线程。您可以将 ISR 视为 \xe2\x80\x9cborrowing\xe2\x80\x9d 当前正在运行的线程,但我\n 更愿意将 ISR 视为在如此低的级别上执行,\n 的概念\n xe2\x80\x9cthread\xe2\x80\x9d 不\xe2\x80\x99t 存在 - 所以它们位于 \xe2\x80\x9cbeneath\xe2\x80\x9d 所有\n …

javascript c# asynchronous async-await

8
推荐指数
1
解决办法
9015
查看次数

如果它们太大,我如何使SQL Server 2012截断插入?

所以我有一个table类型的列,VARCHAR (100)我想知道是否有一种配置方式,SQL Server 2012 (T-SQL)以便如果一个事务尝试提交一个101+字符的字符串,那么它需要前100.

这是可能的,或者我应该做truncationC#事情侧???

c# t-sql asp.net database-design sql-server-2012

6
推荐指数
1
解决办法
1738
查看次数

在当前上下文中不存在命名的"CommandType"

有人可以帮我理解为什么我在这里收到错误吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Configuration;

namespace JsPractice.Controllers
{
    public class SolutionController : Controller
    {

        public ActionResult Index ( )
        {

            return View();
        }

        [HttpPost]
        public ActionResult CreateNew ( int problem_id, string solver, string solution_code, string test_code )
        {
            // Going to move this to controller later .. 
            using ( SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalJsPracticeDb"].ConnectionString) )
            {
                using ( SqlCommand cmd = new SqlCommand("AddSolution", con) )
                {
                    cmd.CommandType = …
Run Code Online (Sandbox Code Playgroud)

.net c# sql asp.net asp.net-mvc

5
推荐指数
1
解决办法
7485
查看次数

我怎样才能编写一个程序来获取i到j或像这样的树?

我有一张桌子

        Users
-------------------------
id | ancestor_id | ....
-------------------------
 1 |    NULL     | ....
 2 |     1       | ....
 3 |     1       | ....
 4 |     3       | ....
 5 |     3       | ....
Run Code Online (Sandbox Code Playgroud)

这将代表一棵树

   level 1           1
                   /  \ 
   level 2        2    3 
                      / \
   level 3           4   5
Run Code Online (Sandbox Code Playgroud)

我想创建一个返回的过程i,通过日j日代给定用户的后裔:

CREATE PROCEDURE DescendantsLevel 
   @user_id INT,
   @i INT,
   @j INT
AS
   ....
Run Code Online (Sandbox Code Playgroud)

但是,如果@jNULL,则返回从生成开始的所有后代@i.

例子:

EXEC DescendantLevel @user_id=1,@i=2,@j=NULL
Run Code Online (Sandbox Code Playgroud)

会回来的

-------------------------
id …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server algorithm database-design

5
推荐指数
1
解决办法
54
查看次数

是否有任何保证在JavaScript中访问对象属性的恒定时间?

这是关于我在亚马逊采访时与面试官进行的辩论.

我来创建一个对象:

var Obj = {};
Obj['SomeProperty'] = function ( ) { console.log("Accessed some property"); };
Obj[69] = true;
Run Code Online (Sandbox Code Playgroud)

JavaScript中是否有任何保证当我随后访问这两个属性时Obj['SomeProperty'],Obj[69]以及相应的值function ( ) { console.log("Accessed some property"); };69在O(1)时间内查找?我知道接入运营商[]提供了一个经验丰富的程序员的印象是,他处理一个O(1)查找结构,但不能将它有可能为一个JavaScript引擎来实现Object的方式,使得性能为O抬头(1 )?

javascript complexity-theory time-complexity data-structures

4
推荐指数
1
解决办法
1139
查看次数

如何获取 JavaScript 中所有可能的字符?

假设 JavaScript 中的所有字符都是a, b, c, d,ef。我想做的是在字符之间创建随机映射。所以上面的内容可能是这样的

{ `a` : `e`,
  `b` : `b`, 
  `c` : `e`, 
  `d` : `b`,
  `e` : `a`,
  `f` : `c` }
Run Code Online (Sandbox Code Playgroud)

首先,如何获取 JavaScript 中所有可能的字符?

var AllChars = new Array(); 
// ... fill AllChars with the full range of characters
Run Code Online (Sandbox Code Playgroud)

javascript algorithm

3
推荐指数
1
解决办法
4324
查看次数

为什么(obj ['arr'] || obj ['arr'] = []).push(5); 给我一个"分配中无效的左手边"错误?

我正试着写下这个幻想

"如果数组存在则推送数组;否则,初始化数组然后推送"

实现.我在Chrome控制台中写道

var obj = new Object();
( obj['arr'] || obj['arr'] = [] ).push(5);
Run Code Online (Sandbox Code Playgroud)

我有理由相信这应该有效.

根据Douglas Crockford的书" JavaScript:The Good Parts",

||操作者产生其第一个操作数的值,如果所述第一操作数是truthy.否则,它产生第二个操作数的值.

如果我输入obj['arr']我的控制台,返回的值是undefined,这是假的,而不是真的.如果我输入obj['arr'] = []我的控制台,返回的值是该数组obj['arr'] = [],这是真的.因此声明

( obj['arr'] || obj['arr'] = [] ).push(5);
Run Code Online (Sandbox Code Playgroud)

应该相当于

(obj['arr'] = []).push(5)
Run Code Online (Sandbox Code Playgroud)

obj['arr'] = [5]按预期返回.

那么为什么我得到一个

未捕获的ReferenceError:赋值中的左侧无效(...)

我写的时Chrome中的错误( obj['arr'] || obj['arr'] = [] ).push(5);?????

javascript

2
推荐指数
1
解决办法
123
查看次数