草庐IT

Async-await

全部标签

c# - 通过WCF服务的独立自跟踪实体的异步延迟加载导航属性?

我有一个WCF客户端,它将自跟踪实体传递给使用MVVM构建的WPF应用程序。应用程序本身具有动态接口(interface)。用户可以根据自己所扮演的角色或正在执行的任务来选择希望在工作区域中看到的对象。我的自跟踪实体具有很多导航属性,并且不需要很多。由于其中一些对象可能很大,因此我只想按要求加载这些属性。我的应用程序如下所示:[WCF][ClientSideRepository][ViewModel][View]我的模型是自我跟踪实体。客户端存储库在将模型返回给请求它的ViewModel之前,先连接了LazyLoad方法(如果需要)。所有WCF服务调用都是异步的,这意味着LazyLoa

c# - async-await 的延续爆发——表现不同?

我有一个在单击按钮后运行的winform代码:​​voidbutton1_Click(objectsender,EventArgse){AAA();}asyncTaskBBB(intdelay){awaitTask.Delay(TimeSpan.FromSeconds(delay));MessageBox.Show("hello");}asyncTaskAAA(){vartask1=BBB(1);//问题:为什么当delay=1时我一次看到一个MessageBox:但是如果我将延迟更改为:1,2,3—vartask1=BBB(1);vartask2=BBB(2);vartask3=BB

c# - async-await 的延续爆发——表现不同?

我有一个在单击按钮后运行的winform代码:​​voidbutton1_Click(objectsender,EventArgse){AAA();}asyncTaskBBB(intdelay){awaitTask.Delay(TimeSpan.FromSeconds(delay));MessageBox.Show("hello");}asyncTaskAAA(){vartask1=BBB(1);//问题:为什么当delay=1时我一次看到一个MessageBox:但是如果我将延迟更改为:1,2,3—vartask1=BBB(1);vartask2=BBB(2);vartask3=BB

c# - 当我在接口(interface)方法调用中忘记 `await` 时没有警告

考虑:usingSystem.Threading.Tasks;classProgram{staticvoidMain(string[]args){Cc=newC();c.FooAsync();//warningCS4014:Becausethiscallisnotawaited,executionofthecurrentmethodcontinuesbeforethecalliscompleted.Considerapplyingthe'await'operatortotheresultofthecall.((I)c).FooAsync();//Nowarning}}classC:I{

c# - 当我在接口(interface)方法调用中忘记 `await` 时没有警告

考虑:usingSystem.Threading.Tasks;classProgram{staticvoidMain(string[]args){Cc=newC();c.FooAsync();//warningCS4014:Becausethiscallisnotawaited,executionofthecurrentmethodcontinuesbeforethecalliscompleted.Considerapplyingthe'await'operatortotheresultofthecall.((I)c).FooAsync();//Nowarning}}classC:I{

c# - Task.WhenAny - 剩余的运行任务会怎样?

我有以下代码:List>tasks=tasksQuery.ToList();while(tasks.Any()){TaskcompletedTask=awaitTask.WhenAny(tasks);if(awaitcompletedTask)returntrue;tasks.Remove(completedTask);}它并行启动任务。当第一个完成的任务返回true时,该方法返回true。我的问题是:所有已启动且可能仍在后台运行的剩余任务会怎样?这是执行异步、并行且应在第一个条件出现后返回的代码的正确方法,还是逐个启动它们并单独等待更好? 最佳答案

c# - Task.WhenAny - 剩余的运行任务会怎样?

我有以下代码:List>tasks=tasksQuery.ToList();while(tasks.Any()){TaskcompletedTask=awaitTask.WhenAny(tasks);if(awaitcompletedTask)returntrue;tasks.Remove(completedTask);}它并行启动任务。当第一个完成的任务返回true时,该方法返回true。我的问题是:所有已启动且可能仍在后台运行的剩余任务会怎样?这是执行异步、并行且应在第一个条件出现后返回的代码的正确方法,还是逐个启动它们并单独等待更好? 最佳答案

c# - 在 LINQ 语句中使用 async/await 时实际发生了什么?

下面的代码片段可以编译,但我希望它等待任务结果而不是给我List>.varfoo=bars.Select(asyncbar=>awaitBaz(bar)).ToList()正如指出的那样here,你需要使用Task.WhenAll:vartasks=foos.Select(asyncfoo=>awaitDoSomethingAsync(foo)).ToList();awaitTask.WhenAll(tasks);但是acomment指出async和await在Select()里面不需要:vartasks=foos.Select(foo=>DoSomethingAsync(foo)).

c# - 在 LINQ 语句中使用 async/await 时实际发生了什么?

下面的代码片段可以编译,但我希望它等待任务结果而不是给我List>.varfoo=bars.Select(asyncbar=>awaitBaz(bar)).ToList()正如指出的那样here,你需要使用Task.WhenAll:vartasks=foos.Select(asyncfoo=>awaitDoSomethingAsync(foo)).ToList();awaitTask.WhenAll(tasks);但是acomment指出async和await在Select()里面不需要:vartasks=foos.Select(foo=>DoSomethingAsync(foo)).

c# - 为什么 Task.Delay 在这种情况下不起作用

我正在测试async,我发现了这种我无法理解的情况:varwatch=Stopwatch.StartNew();vart1=Task.Factory.StartNew(async()=>{awaitTask.Delay(2000);return2;});vart2=Task.Factory.StartNew(()=>{Task.Delay(1000);return1;});awaitTask.WhenAll(t1,t2);varresult=watch.ElapsedMilliseconds;我很想明白为什么结果总是0!为什么不是1000、2000或两个任务的总和3000?为什么Tas