Tag: .net 4.5

Interlocked.Exchange和Volatile.Write之间的区别?

Interlocked.Exchange和Volatile.Write有什么区别? 两种方法都更新某些变量的值。 有人可以总结何时使用它们? http://msdn.microsoft.com/ru-ru/library/bb337971和http://msdn.microsoft.com/en-us/library/gg712713.aspx 特别是我需要更新我的数组的双项,我希望另一个线程看到最新的值。 什么是首选? Interlocked.Exchange(ref arr[3], myValue)或Volatile.Write(ref arr[3], info); arr被声明为double ? ================================================== ==========================真实的例子,我声明像这样的双数组: private double[] _cachedProduct; 在一个线程中,我更新它: _cachedProduct[instrumentId] = calcValue; … are.Set(); 在另一个线程中,我像这样读取这个数组: while(true) { are.WaitOne(); … result += _cachedProduct[instrumentId]; … } 对我来说,它只是工作正常。 但是为了确保“它将始终有效”,无论它看起来如何,我应该添加Volatile.Write或Interlocked.Exchange 。 因为双重更新不能保证是primefaces的http://msdn.microsoft.com/en-us/library/aa691278%28VS.71%29.aspx 在这个问题的答案中,我希望看到Volatile和Interlocked类的详细比较。 为什么我们需要2节课? 哪一个和何时使用?

HttpClient身份validation标头未被发送

我正在尝试将HttpClient用于需要基本HTTP身份validation的第三方服务。 我正在使用AuthenticationHeaderValue 。 这是我到目前为止所提出的: HttpRequestMessage request = new HttpRequestMessage( new RequestType(“third-party-vendor-action”), MediaTypeHeaderValue.Parse(“application/xml”)); request.Headers.Authorization = new AuthenticationHeaderValue( “Basic”, Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes( string.Format(“{0}:{1}”, “username”, “password”)))); var task = client.PostAsync(Uri, request.Content); ResponseType response = task.ContinueWith( t => { return t.Result.Content.ReadAsAsync(); }).Unwrap().Result; 看起来POST动作工作正常,但我没有收到我期望的数据。 通过一些反复试验,并最终使用Fiddler来嗅探原始流量,我发现授权标头没有被发送。 我已经看过了 ,但我认为我已经将身份validation方案指定为AuthenticationHeaderValue构造函数的一部分。 有没有我错过的东西?

如何将字符串转换为印度货币格式?

我试图将字符串转换为印度货币格式,如果输入是“1234567”然后输出应为“12,34,567” 我写了下面的代码,但它没有给出预期的输出。 CultureInfo hindi = new CultureInfo(“hi-IN”); string text = string.Format(hindi, “{0:c}”, fare); return text; 谁能告诉我怎么做?

VS2012 $(存在)只接受标量值

好吧,这更多的是构建错误,而不是编程错误。 我从来没有太多理由让我的手弄脏构建,所以这个错误令我感到困惑。 我试过谷歌搜索这个错误,结果很少,答案要么不存在,要么不可理解或不适用。 错误是: The “exists” function only accepts a scalar value, but its argument “$(PackageSourceManifest)” evaluates to “[same path];[same path]” which is not a scalar value. C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\ v10.0\Web\Microsoft.Web.Publishing.targets 无论如何,我挖到了Microsoft.Web.Publishing.targets,我找到了错误输出的行。 我有详细的建立在我试图看到的地方,如果我能找到任何可以解决的问题。 没有。 我已经搜索了如何更改Package Source Manifest,我已经查看了Build Properties,我已经搜索了一个源清单,甚至是搜索源清单的内容,没有。 也许我看起来太难了或者我只是不知道该找什么。 关于如何解决这个问题以及导致这个问题的任何想法?

LogicalOperationStack与.Net 4.5中的异步不兼容

Trace.CorrelationManager.LogicalOperationStack允许嵌套逻辑操作标识符,其中最常见的情况是日志记录(NDC)。 是否仍然可以使用async-await ? 这是一个使用LogicalFlow的简单示例,它是我在LogicalOperationStack简单包装器: private static void Main() => OuterOperationAsync().GetAwaiter().GetResult(); private static async Task OuterOperationAsync() { Console.WriteLine(LogicalFlow.CurrentOperationId); using (LogicalFlow.StartScope()) { Console.WriteLine(“\t” + LogicalFlow.CurrentOperationId); await InnerOperationAsync(); Console.WriteLine(“\t” + LogicalFlow.CurrentOperationId); await InnerOperationAsync(); Console.WriteLine(“\t” + LogicalFlow.CurrentOperationId); } Console.WriteLine(LogicalFlow.CurrentOperationId); } private static async Task InnerOperationAsync() { using (LogicalFlow.StartScope()) { await Task.Delay(100); } } LogicalFlow : public static class LogicalFlow […]

C#具有异步函数调用同步函数或同步函数调用异步函数

我正在编写一个C#.Net 4.5库,用于执行常见的sql数据库操作(备份,恢复,执行脚本等)。 我希望每个操作都有同步和异步函数,因为这个库将由控制台和GUI应用程序使用,但我不想在任何地方重复代码。 所以我看到它,我有两个选择: 编写在同步函数中执行工作的代码,然后将其包装在async函数的任务中,如下所示: public void BackupDB(string server, string db) { // Do all of the work and long running operation here } public async Task BackupDBAsync(string server, string db) { await Task.Factory.StartNew(() => BackupDB(server, db)).ConfigureAwait(false); } 编写在异步函数中执行工作的代码,并使用.Wait()从同步函数中调用它: public async Task BackupDBAsync(string server, string db) { // Do all of the work and long […]

IList 和IReadOnlyList

如果我有一个需要参数的方法, 拥有Count属性 有一个整数索引器(get-only) 这个参数的类型应该是什么? 我会在.NET 4.5之前选择IList ,因为没有其他可索引的集合接口,并且数组实现它,这是一个很大的优点。 但.NET 4.5引入了新的IReadOnlyList接口,我也希望我的方法能够支持它。 如何在不违反DRY等基本原则的情况下编写此方法以支持IList和IReadOnlyList ? 编辑 :丹尼尔的回答给了我一些想法: public void Foo(IList list) => Foo(list, list.Count, (c, i) => c[i]); public void Foo(IReadOnlyList list) => Foo(list, list.Count, (c, i) => c[i]); private void Foo( TList list, int count, Func indexer) where TList : IEnumerable { // Stuff } 编辑2:或者我可以接受一个IReadOnlyList并提供这样的帮助: public static […]

“await”不等待电话完成

我正在构建一个Metro App。 在MainPage.xaml.cs中,我实例化Album,如下所示: Album album = new Album(2012); //With the album ID as its parameter. ListView1.ItemsSource = album.Songs; 在Album.cs中,构造函数如下: public Album(int ID) { this.ID = ID; Initialize(); //Serves as a wrapper because I have to call httpClient.GetStreamAsync() and “async” doesn’t work for the constructor. } 最后,Initialize方法: private async void Initialize() { //…some code… HttpClient cli […]

绑定的延迟属性来自.Net 4.0中的.Net 4.5

如何在.Net 4.0中实现关于绑定的.Net 4.5( 此处描述)的延迟属性? 我知道我不能inheritanceBindingBase,因为ProvideValue是密封的。 我可以实现MarkupExtension,但这意味着我现在必须重写BindingExtension中的所有属性还有其他方法吗?

c#.net 4.5 async / multithread?

我正在编写一个从网页上抓取数据的C#控制台应用程序。 此应用程序将访问大约8000个网页并刮取数据(每页上的数据格式相同)。 我现在没有异步方法,也没有multithreading。 但是,我需要它更快。 它只使用了大约3%-6%的CPU,我想是因为它花时间等待下载html。(WebClient.DownloadString(url)) 这是我程序的基本流程 DataSet alldata; foreach(var url in the8000urls) { // ScrapeData downloads the html from the url with WebClient.DownloadString // and scrapes the data into several datatables which it returns as a dataset. DataSet dataForOnePage = ScrapeData(url); //merge each table in dataForOnePage into allData } // PushAllDataToSql(alldata); 我一直试图multithreading,但不知道如何正确开始。 我正在使用.net 4.5并且我的理解是异步并且在4.5中等待使得这更容易编程但我仍然有点迷失。 我的想法是继续制作这条线异步的新线程 […]