Tag: c# 5.0

为什么在等待任务返回方法时出现InvalidCastException?

(问题的真正标题应该是“为什么我得到一个’无法播放’System.Runtime.CompilerServices.TaskAwaiter`1 [System.Runtime.CompilerServices.VoidTaskResult]’类型的对象’来键入’System.Runtime.CompilerServices .INotifyCompletion’“,但不幸的是,这对StackOverflow来说太长了。:) 嗨, 当我试图await执行我的方法时,我遇到了一些特殊的问题。 调用代码看起来像这样(摘录): private async Task DownloadAddonFileAsync(dynamic addon, dynamic file, string targetFolder) { // … await DownloadFileAsync(file, targetFolder, uri); DownloadFileAsync看起来像这样: protected async Task DownloadFileAsync(dynamic file, string targetFolder, string uri) { // … var fileBytes = await AppLoaderRestClient.GetAsync(uri); 反过来,AppLoaderRestClient.GetAsync()看起来像这样: public static async Task GetAsync(string uri) { // … if (typeof (T) == typeof […]

当等待是最后一次时,不必要的异步/等待?

我最近一直在处理异步等待 (阅读包括斯蒂芬和乔恩最后两章在内的所有可能的文章),但我得出结论,我不知道它是否100%正确。 – 因此我的问题。 由于async只允许单词等待存在,我将把async放在一边。 AFAIU等待着继续。 而不是编写function(连续)代码,写同步代码。 (我想将其称为可回调代码) 因此,当编译器到达await – 它将代码分成2个部分,并在第一部分完成后注册要执行的第二部分( 我不知道为什么不使用单词callback – 这正是所做的 ) 。 (同时工作 – 线程回来做其他事情)。 但看看这段代码: public async Task ProcessAsync() { Task workTask = SimulateWork(); string st= await workTask; //do something with st } public Task SimulateWork() { return … } 当线程到达await workTask; 它将方法分为2个部分。 所以在SimulateWork完成之后 – 方法的继续:AKA: //do something with st执行//do […]

使用Async和Await进行异步编程

我正在阅读本教程,了解如何在c#中异步编程并遇到错误我不知道如何解决。 这是链接: http : //msdn.microsoft.com/en-us/library/hh191443.aspx ,错误是: Cannot find all types required by the ‘async’ modifier. Are you targeting the wrong framework version, or missing a reference to an assembly? 我的目标是.NET 4.0框架,并且不确定是否需要任何其他程序集。 这是代码: public async Task AccessTheWebAsync(Class1 class1, Class2 class2) { // GetStringAsync returns a Task. That means that when you await the // task you’ll […]

异步一直向下?

试图理解新的异步/等待模式,我有一个问题,我找不到答案,即如果我应该用异步装饰我的方法,如果我打算从其他异步函数调用这些方法,或只是返回Task在适当的地方? 换句话说,这些A,B或C类中哪一个最好,为什么? class A { public async Task foo1() //Should be consumed { return await foo2(); } public async Task foo2() //Could be consumed { return await foo3(); } private async Task foo3() //Private { return await Task.Run(…); } } class B { public async Task foo1() //Should be consumed { return await foo2(); } […]

错误CS1056:在tfs持续集成过程中运行msbuild的意外字符’$’

我有一个框架针对.NET Framework 4.6.1 ,作为tfs上持续集成过程的一部分,我们创建了一个Build Solution任务,以确保代码正确编译。 现在,TFS服务器具有最新版本的.Net Famework 4.6.2 。 在寄存器中,这是框架的Release键的值 在所有其他操作系统版本上:394806 => .NET Framework 4.6.2 但是当构建运行时,它会出现此错误: Error CS1056: Unexpected character ‘$’ 我不想用string.Format替换字符串插值来解决这个问题,请提供另一种解决方法来解决它。 我是否需要在TFS服务器上安装其他东西?

使用Async和Await转换普通的Http Post Web请求

我如何使用Async / Await模式转换我的传统HttpWebRequest“POST”调用,这里有我附加我当前的代码,任何人请帮我转换此代码使用Windows Phone 8的Async / Await模式。 public void GetEnvironmentVariables(Action getResultCallback, Action getErrorCallback) { CredentialsCallback = getResultCallback; ErrorCallback = getErrorCallback; var uri = new Uri(BaseUri); var request = (HttpWebRequest)WebRequest.Create(uri); request.Method = “POST”; request.ContentType = “application/json”; var jsonObject = new JObject { new JProperty(“apiKey”,_api), new JProperty(“affiliateId”,_affid), }; var serializedResult = JsonConvert.SerializeObject(jsonObject); byte[] requestBody = Encoding.UTF8.GetBytes(serializedResult); request.BeginGetRequestStream(GetRequestStreamCallback, […]

async和await是否会提高ASP.Net应用程序的性能

我最近阅读了一篇关于c#-5和新的和漂亮的异步编程function的文章。 我看到它在Windows应用程序中运行很好。 问题来了我是否这个function可以提高ASP.Net性能? 考虑这两个psudo代码: public T GetData() { var d = GetSomeData(); return d; } 和 public async T GetData2() { var d = await GetSomeData(); return d; } 在ASP.Net中有两个代码区别吗? 谢谢

如何将其转换为异步任务?

鉴于以下代码…… static void DoSomething(int id) { Thread.Sleep(50); Console.WriteLine(@”DidSomething({0})”, id); } 我知道我可以将其转换为异步任务,如下所示…… static async Task DoSomethingAsync(int id) { await Task.Delay(50); Console.WriteLine(@”DidSomethingAsync({0})”, id); } 通过这样做,如果我多次调用(Task.WhenAll),一切都会比使用Parallel.Foreach或甚至在循环内调用更快更高效。 但是有一分钟,让我们假装Task.Delay()不存在,我实际上必须使用Thread.Sleep(); 我知道实际情况并非如此,但这是概念代码,延迟/睡眠通常是IO操作,其中没有异步选项(例如早期EF)。 我试过以下…… static async Task DoSomethingAsync2(int id) { await Task.Run(() => { Thread.Sleep(50); Console.WriteLine(@”DidSomethingAsync({0})”, id); }); } 但是,虽然它运行没有错误,但Lucien Wischik认为这实际上是不好的做法,因为它只是从池中启动线程来完成每个任务(使用以下控制台应用程序也会更慢 – 如果你在DoSomethingAsync和DoSomethingAsync2之间交换打电话你可以看到完成所需的时间有显着差异)… static void Main(string[] args) { MainAsync(args).Wait(); } static async Task […]

如何从.NET 4.5中的并行任务中获益

我想使用.NET迭代器和并行Tasks / await?。 像这样的东西: IEnumerable Foo(IEnumerable source) { Parallel.ForEach( source, s=> { // Ordering is NOT important // items can be yielded as soon as they are done yield return ExecuteOrDownloadSomething(s); } } 不幸的是.NET无法原生地处理这个问题。 迄今为止@svick的最佳答案 – 使用AsParallel()。 奖励:任何实现多个发布者和单个订阅者的简单异步/等待代码? 订阅者将屈服,并且pubs将处理。 (仅核心库)

C#异步方法仍然挂起UI

我有这两种方法,我想运行异步以保持UI响应。 但是,它仍然悬挂着UI。 有什么建议? async void DoScrape() { var feed = new Feed(); var results = await feed.GetList(); foreach (var itemObject in results) { var item = new ListViewItem(itemObject.Title); item.SubItems.Add(itemObject.Link); item.SubItems.Add(itemObject.Description); LstResults.Items.Add(item); } } public class Feed { async public Task<List> GetList() { var client = new WebClient(); string content = await client.DownloadStringTaskAsync(new Uri(“anyUrl”)); var lstItemObjects […]