Tag: async await

C#5和异步​​计时器

是否有一个新的Timer API允许我这样做? await timer.wait(500); 基本上,要睡眠X ms然后恢复执行其余function

可以/应该将任务包装在C#5.0中,等待TResult中的协变吗?

我非常喜欢使用C#5.0异步编程。 但是,有些地方更新旧代码以与TAP模型保持一致会给我带来问题。 这是其中之一 – 我不确定为什么Task在TResult中不协变,但在尝试更新协变接口以从同步模式转换为异步模式时,它会给我带来问题: 旧代码: public interface IInitializable // ** out generic modifier ** { /// /// Boolean to indicate if class is ready /// bool IsInitialized { get; } /// /// Calls for instance to be initialized using current parameters /// Driver initialization can be done in the default constructor if desired /// […]

在异步方法中显示错误消息的更好方法

我们不能在catch块中使用await关键字这一事实使得在WinRT中显示来自异步方法的错误消息非常尴尬,因为MessageDialog API是异步的。 理想情况下,我希望能够写下这个: private async Task DoSomethingAsync() { try { // Some code that can throw an exception … } catch (Exception ex) { var dialog = new MessageDialog(“Something went wrong!”); await dialog.ShowAsync(); } } 但相反,我必须这样写: private async Task DoSomethingAsync() { bool error = false; try { // Some code that can throw an exception […]

等待和等待在C#5.0异步

任务或任务对象是等待的,因此我们可以在返回值为Task或Task 的对象上使用await键。 任务或任务是最常用的等待对象。 我们也可以定义我们自己的等待对象。对象应该具有以下资格。 它有一个GetAwaiter()方法(实例方法或扩展方法); 它的GetAwaiter()方法返回一个awaiter。 在下列情况下,对象是等待者: 它实现了INotifyCompletion或ICriticalNotifyCompletion接口; 它有一个IsCompleted,它有一个getter并返回一个布尔值; 它有一个GetResult()方法,它返回void或结果。 我的问题是为什么微软没有提供限制这些等待对象的界面? 目前实现等待对象的方法有点复杂。

Reactive Extensions订阅呼叫等待

我想基于Reactive Extensions Observable引发的每个事件执行异步调用。 我也试图让所有内容保持同步,因为我希望在处理下一个事件之前完成异步调用。 怎么会去做类似以下的事情呢? 我说类似下面的代码不编译。 settingsChangedInMemory .Subscribe(async _ => { var settings = Extract(); await SaveSettings(settings); }); 我不确定它是否会改变任何东西,但我需要订阅多个Observable。 例如,像这样的另一个订阅。 settingsChangedOnDisk .Subscribe(async _ => { var settings = await ReadSettings(settings); Apply(settings); }); 您将如何使用Reactive Extensions执行此操作?

VS 2010允许我在C#中使用新的async和await关键字吗?

当新的async和awaitfunction上线时,我是否可以在Visual Studio 2010中使用它们,还是需要Visual Studio? 我要问的是:微软是否会维持VS 2010和VS 11之间的语言function平等? CTP是预览,可靠或不可用,我们的客户不希望我们使用被认为是不完整或未经测试的技术 – 所以尽管获得了许可,但我无法使用它。 我的雇主不是购买VS 11,所以我需要知道我是否在浪费时间编写异步和等待代码。

顺序等待VS继续等待

我想知道编写异步代码的最佳/正确方法是什么,该异步代码由两个(或更多)异步和依赖(第一个必须完成执行第二个)操作组成。 使用async / await的示例: await RunFirstOperationAsync(); await RunSecondOperationAsync(); 续例示例: await RunFirstOperationAsync() .ContinueWith(t => RunSecondOperationAsync());

NSubstitute – 收到异步 – “等待电话”警告

我试图validation使用正确的参数调用异步方法。 但是,我收到了警告: “因为没有等待这个调用,所以当前方法的执行在调用完成之前继续。考虑将’await’运算符应用于调用的结果”。 此警告显示在//Assert注释(下方)下方的代码行上。 我使用NSubstitute进行的测试如下: [Test] public async Task SimpleTests() { //Arrange var request = CreateUpdateItemRequest(); databaseHelperSub.ExecuteProcAsync(Arg.Any()).Returns(Task.FromResult((object)null)); //Act await underTest.ExecuteAsync(request); //Assert databaseHelperSub.Received().ExecuteProcAsync(Arg.Is( p => p.StoredProcName == StoredProcedureName && p.Parameters[0].ParameterName == “Param1” && p.Parameters[0].Value.ToString() == “Value1” && p.Parameters[1].ParameterName == “Param2” && p.Parameters[1].Value.ToString() == “Value2”)); } 被测单元underTest.ExecuteAsync(request)调用ExecuteProcedureAsync并执行await: var ds = await DatabaseHelper.ExecuteProcAsync(dbParams); 由于使用NSubstitute,在执行被测单元后需要Received()。 而在RhinoMocks中,您可以预期在执行测试单元之前进行调用。 RhinoMocks可以返回Task.FromResult()而NSubstitute不能。 RhinoMocks等效的工作原理如下: [Test] […]

从未完成的任务会发生什么? 他们妥善处理?

说我有以下课程: class SomeClass { private TaskCompletionSource _someTask; public Task WaitForThing() { _someTask = new TaskCompletionSource(); return _someTask.Task; } //Other code which calls _someTask.SetResult(..); } 然后在别处,我打电话 //Some code.. await someClassInstance.WaitForThing(); //Some more code //Some more code在调用_someTask.SetResult(..)之前,不会调用//Some more code 。 调用上下文在内存中等待。 但是,假设从未调用过SetResult(..) ,并且someClassInstance停止被引用并被垃圾收集。 这会造成内存泄漏吗? 或.Net自动神奇地知道需要处理调用上下文?

具有非主键值的FindAsync

public class Foo { public int Id { get; set; } public int UserId { get; set; } } 这似乎是异步执行此操作的方法: DatabaseContext db = new DatabaseContext(); Foo foo = await db.Foos.FindAsync(fooid); 如何根据UserId的值异步获取特定用户的所有Foos?