草庐IT

Async-await

全部标签

c# - 同步调用异步方法

我有一个异步方法:publicasyncTaskGenerateCodeAsync(){stringcode=awaitGenerateCodeService.GenerateCodeAsync();returncode;}我需要从一个同步方法调用这个方法。我怎样才能做到这一点而不必复制GenerateCodeAsync方法以使其同步工作?更新目前还没有找到合理的解决方案。但是,我看到HttpClient已经实现了这个模式using(HttpClientclient=newHttpClient()){//asyncHttpResponseMessageresponseAsync=awa

c# - 同步调用异步方法

我有一个异步方法:publicasyncTaskGenerateCodeAsync(){stringcode=awaitGenerateCodeService.GenerateCodeAsync();returncode;}我需要从一个同步方法调用这个方法。我怎样才能做到这一点而不必复制GenerateCodeAsync方法以使其同步工作?更新目前还没有找到合理的解决方案。但是,我看到HttpClient已经实现了这个模式using(HttpClientclient=newHttpClient()){//asyncHttpResponseMessageresponseAsync=awa

c# - 构造函数可以异步吗?

我有一个项目,我试图在构造函数中填充一些数据:publicclassViewModel{publicObservableCollectionData{get;set;}asyncpublicViewModel(){Data=awaitGetDataTask();}publicTask>GetDataTask(){Task>task;//Createataskwhichrepresentsgettingthedatareturntask;}}不幸的是,我遇到了一个错误:Themodifierasyncisnotvalidforthisitem当然,如果我包装一个标准方法并从构造函数中调用

c# - 构造函数可以异步吗?

我有一个项目,我试图在构造函数中填充一些数据:publicclassViewModel{publicObservableCollectionData{get;set;}asyncpublicViewModel(){Data=awaitGetDataTask();}publicTask>GetDataTask(){Task>task;//Createataskwhichrepresentsgettingthedatareturntask;}}不幸的是,我遇到了一个错误:Themodifierasyncisnotvalidforthisitem当然,如果我包装一个标准方法并从构造函数中调用

c# - 捕获由 async void 方法抛出的异常

使用Microsoft的异步CTPfor.NET,是否可以在调用方法中捕获异步方法抛出的异常?publicasyncvoidFoo(){varx=awaitDoSomethingAsync();/*Handletheresult,butsometimesanexceptionmightbethrown.Forexample,DoSomethingAsyncgetsdatafromthenetworkandthedataisinvalid...aProtocolExceptionmightbethrown.*/}publicvoidDoFoo(){try{Foo();}catch(Pro

c# - 捕获由 async void 方法抛出的异常

使用Microsoft的异步CTPfor.NET,是否可以在调用方法中捕获异步方法抛出的异常?publicasyncvoidFoo(){varx=awaitDoSomethingAsync();/*Handletheresult,butsometimesanexceptionmightbethrown.Forexample,DoSomethingAsyncgetsdatafromthenetworkandthedataisinvalid...aProtocolExceptionmightbethrown.*/}publicvoidDoFoo(){try{Foo();}catch(Pro

c# - async/await - 何时返回 Task 与 void?

在什么场景下使用publicasyncTaskAsyncMethod(intnum)代替publicasyncvoidAsyncMethod(intnum)我能想到的唯一场景是,如果您需要任务能够跟踪其进度。另外,在下面的方法中,async和await关键字是不是就不需要了?publicstaticasyncvoidAsyncMethod2(intnum){awaitTask.Factory.StartNew(()=>Thread.Sleep(num));} 最佳答案 通常,您会想要返回一个Task。主要的异常(exception)

c# - async/await - 何时返回 Task 与 void?

在什么场景下使用publicasyncTaskAsyncMethod(intnum)代替publicasyncvoidAsyncMethod(intnum)我能想到的唯一场景是,如果您需要任务能够跟踪其进度。另外,在下面的方法中,async和await关键字是不是就不需要了?publicstaticasyncvoidAsyncMethod2(intnum){awaitTask.Factory.StartNew(()=>Thread.Sleep(num));} 最佳答案 通常,您会想要返回一个Task。主要的异常(exception)

c# - 为所有服务器端代码调用 ConfigureAwait 的最佳实践

当你有服务器端代码(即一些ApiController)并且你的函数是异步的-所以它们返回Task-任何时候你等待你调用的函数是否被认为是最佳实践ConfigureAwait(false)?我读到它的性能更高,因为它不必将线程上下文切换回原始线程上下文。但是,对于ASP.NETWebApi,如果您的请求是在一个线程中传入的,并且您等待某个函数并调用ConfigureAwait(false)当您返回ApiController的最终结果时,这可能会将您置于不同的线程中功能。我在下面打了一个例子:publicclassCustomerController:ApiController{publi

c# - 为所有服务器端代码调用 ConfigureAwait 的最佳实践

当你有服务器端代码(即一些ApiController)并且你的函数是异步的-所以它们返回Task-任何时候你等待你调用的函数是否被认为是最佳实践ConfigureAwait(false)?我读到它的性能更高,因为它不必将线程上下文切换回原始线程上下文。但是,对于ASP.NETWebApi,如果您的请求是在一个线程中传入的,并且您等待某个函数并调用ConfigureAwait(false)当您返回ApiController的最终结果时,这可能会将您置于不同的线程中功能。我在下面打了一个例子:publicclassCustomerController:ApiController{publi