小编Eri*_*k T的帖子

从非异步代码调用异步方法

我正在更新具有在.NET 3.5中构建的API表面的库.因此,所有方法都是同步的.我无法更改API(即,将返回值转换为Task),因为这将要求所有调用者都更改.所以我留下了如何以同步方式最好地调用异步方法.这是在ASP.NET 4,ASP.NET Core和.NET/.NET Core控制台应用程序的上下文中.

我可能不够清楚 - 情况是我现有的代码不是异步识别的,我想使用新的库,如System.Net.Http和仅支持异步方法的AWS SDK.所以我需要缩小差距,并且能够拥有可以同步调用的代码,然后可以在其他地方调用异步方法.

我已经做了很多阅读,并且有很多次这已经被问及并回答了.

从非异步方法调用异步方法

同步等待异步操作,以及为什么Wait()在这里冻结程序

从同步方法调用异步方法

如何同步运行异步Task <T>方法?

同步调用异步方法

如何从C#中的同步方法调用异步方法?

问题是大多数答案都不同!我见过的最常见的方法是使用.Result,但这可能会死锁.我已经尝试了以下所有内容,并且它们可以工作,但我不确定哪种方法可以避免死锁,具有良好的性能,并且可以很好地运行运行时(在尊重任务调度程序,任务创建选项等方面) ).有明确的答案吗?什么是最好的方法?

private static T taskSyncRunner<T>(Func<Task<T>> task)
    {
        T result;
        // approach 1
        result = Task.Run(async () => await task()).ConfigureAwait(false).GetAwaiter().GetResult();

        // approach 2
        result = Task.Run(task).ConfigureAwait(false).GetAwaiter().GetResult();

        // approach 3
        result = task().ConfigureAwait(false).GetAwaiter().GetResult();

        // approach 4
        result = Task.Run(task).Result;

        // approach 5
        result = Task.Run(task).GetAwaiter().GetResult();


        // approach 6
        var t = task();
        t.RunSynchronously();
        result = t.Result;

        // approach 7
        var t1 = task();
        Task.WaitAll(t1); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net multithreading asynchronous task-parallel-library

62
推荐指数
2
解决办法
4万
查看次数

将PowerShell脚本作为git钩子运行

是否可以将PowerShell脚本作为git钩子运行?

我在PowerShell提示符下运行git,这应该没什么区别,但是我似乎无法让它们工作,因为钩子的命名没有扩展,而PowerShell需要(AFAIK).ps1扩展名.我不确定这是问题还是其他问题.

谢谢,埃里克

git powershell githooks

31
推荐指数
7
解决办法
1万
查看次数

Stubbing或Mocking ASP.NET Web API HttpClient

我在项目中使用新的Web API位,我发现我无法正常使用HttpMessageRequest,因为我需要将客户端证书添加到请求中.结果,我正在使用HttpClient(所以我可以使用WebRequestHandler).这一切都很好,除了它不是存根/模拟友好,至少对于Rhino Mocks.

我通常会创建一个HttpClient我将使用的包装器服务,但我想尽可能避免这种情况,因为我需要包装很多方法.我希望我遗漏了一些东西 - 关于如何存根的任何建议HttpClient

unit-testing rhino-mocks wcf-web-api

28
推荐指数
3
解决办法
2万
查看次数

如何在.NET中伪造Azure表存储以进行单元测试?

我正在使用Azure表存储的系统.在其他系统中(例如,SQL,基于文件等),我可以写一个假的,允许我测试我的数据持久性逻辑.但是,我看不到为Azure表服务创建虚假的简单方法.

我可以创建一个行为方式相同的新IIS项目,但这不是编写单元测试的好方法,它更像是一个集成测试.

有关如何对使用Azure Table Storage客户端的数据访问代码进行单元测试的任何想法?

unit-testing azure azure-storage azure-table-storage

18
推荐指数
1
解决办法
1万
查看次数

在VS 2012中是否有可以在XAML和Designer之间切换的键盘快捷键?

在Visual Studio 2012中从代码文件切换到XAML文件时,重点放在设计器上.如果我想编辑XAML(99%的时间),我需要使用鼠标将焦点移动到XAML代码/标记窗口.有没有办法在没有鼠标的情况下将焦点移动到XAML?

注意:在SO中也有类似的问题,但它们涉及在代码背后和XAML设计器之间移动.

xaml xaml-designer visual-studio-2012

16
推荐指数
2
解决办法
3307
查看次数

如何在ElasticSearch/NEST中将单个.NET类型映射到多个嵌套对象类型?

我正在使用NEST库与ElasticSearch进行交互,我正试图找出一种基于非类型数据构建索引类型/嵌套对象的方法.该类型具有以下基本结构.

 public class Entity : DynamicObject
 {
        public string Id { get; set; }
        // a bunch of other simple properties

        public override IEnumerable<string> GetDynamicMemberNames()
        {
                return Data.Select(x => x.Name);
        }

        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {

            var dictionary = Data.First(x => x.Name == binder.Name);
            result = dictionary;
            return true;
        }

        // each instance of one these should be a nested object type
        public IList<NestedType> Data { get; set; } 

        public class NestedType
        {
            // How do …
Run Code Online (Sandbox Code Playgroud)

c# elasticsearch nest

16
推荐指数
1
解决办法
1854
查看次数

Reactive Extensions是否适合公共汽车?

我现在一直在使用Rx在一个应用程序中创建一个事件总线(想想CQRS/ES),它看起来效果很好.然而,在调查了一堆不同的Event Sourcing框架之后,我还没有看到Rx使用过一次.与基于反射/容器的调度程序相比,它看起来非常合适,但也许有一些我缺少的东西.我宁愿不花一大堆时间在一个有3个月的停顿的东西上.是不是有理由说Rx不合适?

谢谢,埃里克

cqrs system.reactive event-sourcing

15
推荐指数
1
解决办法
4563
查看次数

在构建ASP.NET网站时,如何查看Visual Studio生成的元项目文件?

我有一个相当大的解决方案,混合使用程序集和ASP.NET网站(没有csproj文件的那些).我正在尝试从命令行自定义构建,因此我需要了解MSBuild究竟在做什么.

当MSBuild构建.sln文件时,我看到它创建了metaproj文件(我假设它是MSBuild文件).但是,它们似乎永远不会出现在文件系统上.我假设MSBuild以某种方式隐藏它们.有没有办法可以查看这些文件?

c# asp.net msbuild

15
推荐指数
1
解决办法
3893
查看次数

在WCF自托管服务中指定Singleton服务

我正在编写一个通过WCF公开服务的应用程序.该服务是自托管的(控制台应用程序),需要使用Singleton实例.我试图弄清楚如何在服务配置中指定单例,而不使用服务实现上的属性.是否可以在没有属性的代码中指定单例?

谢谢,埃里克

wcf self-hosting

13
推荐指数
1
解决办法
9562
查看次数

Azure Service Bus和消息传递会话

我一直在研究Azure服务总线队列( Azure存储队列).我读过的所有细节都表明它支持FIFO语义,但仅限于"消息传递会话"的上下文.问题是我似乎无法找到有关Azure上下文中究竟是什么的任何信息.这是一个WCF构造,还是特定于Azure Service Bus的东西?我认为它与本地交易无关,但我并非百分之百确定.

任何指针都会非常有用.谢谢!

azure azure-queues azureservicebus

12
推荐指数
1
解决办法
1万
查看次数