Questions tagged «async-await»

这涵盖了使用async和await关键字的各种编程语言支持的异步编程模型。

2
Async await关键字是否等同于ContinueWith lambda?
有人可以请我确认我是否正确理解Async await关键字吗?(使用CTP版本3) 到目前为止,我已经知道,在方法调用之前插入await关键字实际上可以完成两件事:A。它创建立即返回,B。它创建一个“ continuation”,在异步方法调用完成时调用。无论如何,延续是该方法的代码块的其余部分。 所以我想知道的是,这两个代码在技术上是否等效,如果是,这是否基本上意味着await关键字与创建ContinueWith Lambda相同(即,它基本上是一个编译器的快捷方式)?如果没有,有什么区别? bool Success = await new POP3Connector( "mail.server.com", txtUsername.Text, txtPassword.Text).Connect(); // At this point the method will return and following code will // only be invoked when the operation is complete(?) MessageBox.Show(Success ? "Logged In" : "Wrong password"); VS (new POP3Connector( "mail.server.com", txtUsername.Text, txtPassword.Text ).Connect()) …

3
为什么不能识别“异步无效”单元测试?
async void 单元测试不能在Visual Studio 2012中运行: [TestClass] public class MyTestClass { [TestMethod] public async void InvisibleMyTestMethod() { await Task.Delay(1000); Assert.IsTrue(true); } } 如果要进行异步单元测试,则测试方法必须返回Task: [TestMethod] public async Task VisibleMyTestMethod() { await Task.Delay(1000); Assert.IsTrue(true); } 为什么会这样呢?并不是说我绝对需要一种async void测试方法,我只是很好奇。async void即使无法运行,Visual Studio 2012在构建测试方法时也不会发出警告或错误。


6
JavaScript数组.reduce与async / await
似乎在将async / await与.reduce()合并时遇到一些问题,如下所示: const data = await bodies.reduce(async(accum, current, index) => { const methodName = methods[index] const method = this[methodName] if (methodName == 'foo') { current.cover = await this.store(current.cover, id) console.log(current) return { ...accum, ...current } } return { ...accum, ...method(current.data) } }, {}) console.log(data) 在完成之前data记录该对象。this.store 我知道您可以利用Promise.all异步循环,但这是否适用于.reduce()?

8
如何在Main中调用异步方法?
public class test { public async Task Go() { await PrintAnswerToLife(); Console.WriteLine("done"); } public async Task PrintAnswerToLife() { int answer = await GetAnswerToLife(); Console.WriteLine(answer); } public async Task<int> GetAnswerToLife() { await Task.Delay(5000); int answer = 21 * 2; return answer; } } 如果要在main()方法中调用Go,该怎么办?我正在尝试C#的新功能,我知道我可以将异步方法挂接到事件上,并通过触发该事件,可以调用异步方法。 但是,如果我想直接在main方法中调用该怎么办?我怎样才能做到这一点? 我做了类似的事情 class Program { static void …


8
等待异步Void方法调用进行单元测试
我有一个看起来像这样的方法: private async void DoStuff(long idToLookUp) { IOrder order = await orderService.LookUpIdAsync(idToLookUp); // Close the search IsSearchShowing = false; } //Other stuff in case you want to see it public DelegateCommand<long> DoLookupCommand{ get; set; } ViewModel() { DoLookupCommand= new DelegateCommand<long>(DoStuff); } 我正在尝试像这样进行单元测试: [TestMethod] public void TestDoStuff() { //+ Arrange myViewModel.IsSearchShowing …

4
了解C#中的异步/等待
我开始学习C#5.0中的异步/等待,但我一点也不了解。我不明白如何将其用于并行性。我尝试了以下非常基本的程序: using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Task task1 = Task1(); Task task2 = Task2(); Task.WaitAll(task1, task2); Debug.WriteLine("Finished main method"); } public static async Task Task1() { await new Task(() => …
75 c#  async-await 

6
C#中的Promise等效项
在Scala中,有一个Promise类可用于手动完成Future。我正在寻找C#中的替代方法。 我正在编写一个测试,并且希望它看起来像这样: // var MyResult has a field `Header` var promise = new Promise<MyResult>; handlerMyEventsWithHandler( msg => promise.Complete(msg); ); // Wait for 2 seconds var myResult = promise.Future.Await(2000); Assert.Equals("my header", myResult.Header); 我知道这可能不是C#的正确模式,但是即使模式有所不同,我也无法找出实现相同目标的合理方法。 编辑:请注意,async/await在这里没有帮助,因为我没有等待的任务!我只有访问将在另一个线程上运行的处理程序的权限。

4
C#是否对if语句进行短路评估?
我相信C#能够判断结果后就立即停止评估if语句条件。因此,例如: if ( (1 < 0) && check_something_else() ) // this will not be called 由于条件的(1 < 0)值为false,&&因此无法满足条件,check_something_else()因此不会调用该条件。 C#如何使用异步函数评估if语句?是否等待两者返回?因此,例如: if( await first_check() && await second_check() ) // ??? 这会短路吗?


3
如何在流中使用ES8异步/等待?
在https://stackoverflow.com/a/18658613/779159中,示例了如何使用内置的加密库和流来计算文件的md5。 var fs = require('fs'); var crypto = require('crypto'); // the file you want to get the hash var fd = fs.createReadStream('/some/file/name.txt'); var hash = crypto.createHash('sha1'); hash.setEncoding('hex'); fd.on('end', function() { hash.end(); console.log(hash.read()); // the desired sha1sum }); // read all file and pipe it (write it) to the hash object …

5
非通用TaskCompletionSource或替代
我正在使用通常以异步方式显示的警报窗口(Telerik WPF)(打开时代码将继续运行),并且我想通过使用async / await使其同步。 我可以使用它,TaskCompletionSource但是该类是通用的,并且返回一个对象,就像Task<bool>我想要的只是一个Task没有返回值的普通对象一样。 public Task<bool> ShowAlert(object message, string windowTitle) { var dialogParameters = new DialogParameters { Content = message }; var tcs = new TaskCompletionSource<bool>(); dialogParameters.Closed += (s, e) => tcs.TrySetResult(true); RadWindow.Alert(dialogParameters); return tcs.Task; } 调用该方法的代码是 await MessageBoxService.ShowAlert("The alert text.") 我该如何返回一个非通用Task,其功能类似于dialogParameters.Closed事件触发之前可以等待的功能?我知道我可以忽略bool此代码中返回的那个。我正在寻找一个不同的解决方案。
73 c#  .net  async-await 

4
WPF分派器的InvokeAsync和BeginInvoke有什么区别
我在.NET 4.5中注意到,WPF Dispatcher获得了一套新的方法来在Dispatcher的线程上执行称为InvokeAsync的东西。在.NET 4.5之前,我们有Invoke和BeginInvoke分别分别同步和异步处理此事件。 除了命名和可用的稍微不同的重载之外,BeginInvoke和InvokeAsync方法之间是否还有重大区别? 哦,我已经检查过,都可以await编辑: private async Task RunStuffOnUiThread(Action action) { // both of these works fine await dispatcher.BeginInvoke(action); await dispatcher.InvokeAsync(action); }
73 c#  wpf  .net-4.5  async-await 

5
如何异步Files.ReadAllLines并等待结果?
我有以下代码, private void button1_Click(object sender, RoutedEventArgs e) { button1.IsEnabled = false; var s = File.ReadAllLines("Words.txt").ToList(); // my WPF app hangs here // do something with s button1.IsEnabled = true; } Words.txt我将大量单词读入s变量,我正在尝试使用C#5中的asyncandawait关键字,Async CTP Library因此WPF应用程序不会挂起。到目前为止,我有以下代码, private async void button1_Click(object sender, RoutedEventArgs e) { button1.IsEnabled = false; Task<string[]> ws = Task.Factory.FromAsync<string[]>( // What …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.