小编cod*_*fun的帖子

TPL和async/await之间的区别(线程处理)

尝试理解TPL和async/ await在线程创建方面的区别.

我相信TPL(TaskFactory.StartNew)的工作方式类似于ThreadPool.QueueUserWorkItem它在线程池中的线程上排队工作.当然,除非您使用TaskCreationOptions.LongRunning哪个创建新线程.

我认为async/ await会以同样的方式工作:

TPL:

Factory.StartNew( () => DoSomeAsyncWork() )
.ContinueWith( 
    (antecedent) => {
        DoSomeWorkAfter(); 
    },TaskScheduler.FromCurrentSynchronizationContext());
Run Code Online (Sandbox Code Playgroud)

Async/ Await:

await DoSomeAsyncWork();  
DoSomeWorkAfter();
Run Code Online (Sandbox Code Playgroud)

会是相同的.从我一直在阅读它似乎async/ await只有"有时"创建一个新的线程.那么什么时候创建一个新线程,什么时候不创建一个新线程呢?如果您正在处理IO完成端口,我可以看到它不必创建新线程,但我认为它必须.我想我FromCurrentSynchronizationContext对此的理解总是有点模糊.我总是认为它本质上是UI线程.

multithreading task-parallel-library async-await c#-5.0

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

Dapper&TransactionScope?

我刚开始玩Dapper.到目前为止,我喜欢它.小巧玲珑不适用TransactionScope吗?我注意到,即使我从不打电话,TransactionScope.Complete我的更改仍然会提交到数据库.如果现在不支持TransactionScope,是否有任何计划支持它?如果没有那么你必须使用传统的事务管理(System.Transactions.Transaction)?

更新:我刚刚通过Twitter与Sam谈过.它应该工作.我将在明天上午(工作中)更新它的详细信息,看看是否有人可以弄清楚为什么我的更改仍然被提交到数据库,即使我从未调用完成.

transactionscope dapper

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

在ASP.Net Web Api中访问查询字符串?

我正在使用Asp.net Web Api生成的默认模板.我正在使用Get()部分:

        // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我认为访问查询字符串的唯一方法就是创建一个输入字符串变量.所以我创建了另一个函数(我做的唯一更改)到生成的默认控制器:

        public IEnumerable<string> Get(string queryString)
    {
        return new string[] { "value3", "value4" };
    }
Run Code Online (Sandbox Code Playgroud)

我在两种方法中都设置了一个断点,但即使我添加一个查询字符串,它总是会转到没有参数的函数.所以,如果我去http://mybaseurl/api/values?foo=f 它仍然是Get()而不是get(string queryString).它不像我想的那样工作吗?我知道我可以使用Get()函数访问查询字符串Request.RequestUri.ParseQueryString();但是如果可能的话我更喜欢将它分开.

routing query-string asp.net-web-api

42
推荐指数
2
解决办法
5万
查看次数

如何修复"无法解决之间的冲突"错误?

最近将log4net.dll添加到我们的数据对象.我们的数据对象构建完美,但是当您尝试构建引用我们的数据对象的任何内容时,您会收到以下错误:

无法解决"log4net,Version = 1.2.10.0,Culture = neutral,PublicKeyToken = 692fbea5521e1304"和"log4net,Version = 1.2.9.0,Culture = neutral,PublicKeyToken = b32731d11ce58905"之间的冲突.任意选择"log4net,Version = 1.2.10.0,Culture = neutral,PublicKeyToken = 692fbea5521e1304".

我发现以下线程使我能够获得有关该问题的更多信息.

log4net用于我们项目中的各种事情.例如,晶体在GAC中安装了1.2.9.我知道infragictics使用1.2.10.

我们有一个特定的目录 - 调用它c:\references- 我们构建所有的dll,并且我们所有的应用程序都用来引用我们的内部dll.所以我特意在数据对象中将我的引用设置为c:\ references\log4net.dll,即版本1.2.11.这很奇怪,因为在上面的错误消息中你没有看到1.2.11.dll以特定版本引用:= True&Copy Local:= True.我检查了构建目录和log4net的1.2.11确实被正确移动了.

如果它有帮助,这里有一些详细的错误消息:

There was a conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905".
  No way to resolve conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905". Choosing "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" arbitrarily.
      References which depend on "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" [C:\Windows\assembly\GAC_32\log4net\1.2.10.0__692fbea5521e1304\log4net.dll].
          C:\Windows\assembly\GAC_MSIL\CrystalDecisions.Shared\13.0.2000.0__692fbea5521e1304\CrystalDecisions.Shared.dll …
Run Code Online (Sandbox Code Playgroud)

.net msbuild log4net

39
推荐指数
2
解决办法
3万
查看次数

TaskCompletionSource - 尝试理解无线程异步工作

我试图了解其目的TaskCompletionSource及其与异步/无线工作的关系.我想我有一般的想法,但我想确保我的理解是正确的.

我首先开始研究任务并行库(TPL),以确定是否有一种很好的方法来创建自己的无线/异步工作(比如说你试图提高ASP.NET站点的可伸缩性)以及对TPL的理解看起来它将来会非常重要(async/ await).这导致我TaskCompletionSource.

从我的理解来看,添加TaskCompletionSource到你的一个类似乎没有做太多的编码异步; 如果您仍在执行同步代码,则对代码的调用将被阻止.我认为微软API也是如此.例如,假设在DownloadStringTaskAsync关闭的WebClient类,它们最初在做任何安装/同步代码将被阻塞.您正在执行的代码必须在某个线程上运行,无论是当前线程还是您必须分拆一个新线程.

因此TaskCompletionSource,当您调用asyncMicrosoft的其他调用时,您可以在自己的代码中使用,这样您的类的客户端就不必为您的类创建一个新的线程来阻止它.

不确定Microsoft如何在内部执行异步API.例如,for .Net 4.5 有一种新async方法SqlDataReader.我知道有IO完成端口.我认为这可能是大多数C#开发人员不会使用的低级抽象(C++?).不确定IO完成端口是否适用于数据库或网络调用(HTTP),或者它是否仅用于文件IO.

所以问题是,我理解正确吗?是否有某些我错误表示的事情?

asynchronous task-parallel-library

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

在进行未更改的合并时,列为待定更改的文件?

我们已经发生了这种情况超过几次,我们认为它不仅仅是侥幸在这一点上.当我们完成我们的分支后,当我们合并时,有更多的变化,那么它们应该是.因此,显示为挂起更改的大多数文件从未更改(在大多数情况下,无论是分支还是基础).当我比较它们(我使用超出比较)时没有差异.我没有浏览所有没有更改的文件,但在大多数情况下,它们似乎被标记为,[merge]并且实际更改的文件被标记为[merge,edit].

在一个案例中,我们可能更改了大约100个文件,等待更改显示超过22,000个更改.我们尝试在某一点检查它们,认为tfs足够聪明,可以知道哪些文件发生了变化,哪些文件没有变化.但它检查了所有文件.有谁知道发生了什么以及如何解决它?

我们正在运行TFS 2012 w\Update1
每个人都在使用Visual Studio 2012 w\Update 1.

merge tfs tfs2012

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

文件夹转换为分支?

在TFS(我们正在使用2012)中,为什么默认将源文件夹转换为分支? 选项

我真的不认为源是一个分支.这有什么优点/缺点?

tfs branch branching-and-merging tfs2012

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

Web Deploy/Publish是否添加了未知的连接字符串?

以前发布我的web api应用程序工作得很好.今天我将我的应用程序从"任何cpu"转换为x86.现在当我发布它添加一个连接字符串到Web配置,这导致我的应用程序失败.起初我虽然我可能会意外地添加一些东西到web.config转换文件,但不,我没有.这是我的转换文件:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator
    finds an attribute "name" that has a value of "MyDB".

    <connectionStrings>
      <add name="MyDB"
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <entityFramework xdt:Transform="Replace">
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Server=MyWebServer;Database=RunLog;Trusted_Connection=True; MultipleActiveResultSets=True" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>

  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      In the example below, the "Replace" transform will replace the entire
      <customErrors> section of your …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc web-deployment msdeploy

20
推荐指数
1
解决办法
8853
查看次数

结账时自动获取结账锁(tfs2012)?

使用服务器工作区时,有任何方法可以自动获取结账锁.我知道你可以通过工具 - >选项,在"签到项目 - >编辑"下指定"提示锁定结账"但我们希望它自动发生,而不必在他们的脸上抛出一个对话框他们选择结账锁.我们正在从sourcesafe迁移到TFS,我们有一些用户不需要本地工作空间和/或多个签出的灵活性.如果他们得到合并冲突对话,他们会吓坏的.任何使tfs行为都像sourcesafe一样的方法?

tfs vcs-checkout

12
推荐指数
1
解决办法
1万
查看次数

TDD入门?

我们正处于尝试实施TDD的初始阶段.我演示了Visual Studio Team System代码覆盖/ TDD工具,团队对这些可能性感到兴奋.目前我们使用Devpartner进行代码覆盖,但我们想要消除它,因为它很昂贵.我们在TDD方面的经验非常有限,并且希望确保我们不会走错方向.目前我们使用SourceSafe进行源代码管理,但将在大约一年内迁移到Team System.

我可以告诉你我们的应用程序是以数据为中心的.我们有大约900个表,6000个存储过程和大约45GB的数据.我们有很多基于用户数据和系统中不同费率的计算.我们的很多代码也是基于时间(计算当前日期的兴趣).其中一些计算非常复杂且非常密集(只有少数人知道其中一些的详细信息).

我们希望实施TDD来解决质量保证问题.许多开发人员被迫在他们不熟悉的领域修复bug并最终破坏某些东西.开发人员也几乎不敢触摸,因为代码被系统中的所有内容使用.我们想要缓解这个问题.

我担心,因为我们的代码是以数据为中心的,因此实现TDD可能比大多数系统稍微复杂一些.我正在努力想出一个我可以向管理层提出的游戏计划,但我希望不要陷入一些TDD初学者的错误.此外,如果Team System中的工具/设施使TDD更加完整,那么这将是不错的,但我们不想等待Team System开始.

我们要问的第一个问题是,我们应该从visual studio中的工具开始吗?我读过帖子,人们抱怨视觉工作室中的内在工具(需要创建一个单独的项目来创建你的测试)但是视觉工作室中的工具的一件事是他们是免费的,并且集成是好的.如果我们决定使用XUnit,MBUnit或NUnit这样的其他路线,那么我们很可能会有一些可能很高的成本:

1)如果我们想要IDE集成(未提及我们的大部分代码是VB.Net)
--- TestDriven.Net或Resharper或?????

2)如果我们想要代码覆盖
--- NCover(其功能似乎相当昂贵)

此外,我在visual studio 2010中看到了一些非常酷的功能.比如能够进行输入测试(在表单上输入的数据)或记录用户所做的事情的能力,然后将其输入到单元测试中以重现问题.

此外,虽然我还没有完全掌握嘲弄对象的概念,但我知道很多人都认为这是必须的.问题是所有的模拟框架都可以插入到visual studio的TDD版本(MSTEST)中吗?

我告诉管理层我们应该只是添加回归测试(新开发或发现错误),但不要试图通过我们所有的代码并进行单元测试.这将是太大的项目.

无论如何,我会感激任何人的帮助.

.net tdd code-coverage mocking

10
推荐指数
2
解决办法
1482
查看次数