小编thu*_*eys的帖子

将同步代码包装到异步调用中

我在ASP.NET应用程序中有一个方法,需要花费很多时间才能完成.在一个用户请求期间,对此方法的调用最多可能发生3次,具体取决于用户提供的缓存状态和参数.每次通话大约需要1-2秒才能完成.该方法本身是对服务的同步调用,并且不可能覆盖实现.
因此,对服务的同步调用类似于以下内容:

public OutputModel Calculate(InputModel input)
{
    // do some stuff
    return Service.LongRunningCall(input);
}
Run Code Online (Sandbox Code Playgroud)

并且该方法的用法是(注意,方法调用可能不止一次):

private void MakeRequest()
{
    // a lot of other stuff: preparing requests, sending/processing other requests, etc.
    var myOutput = Calculate(myInput);
    // stuff again
}
Run Code Online (Sandbox Code Playgroud)

我尝试从我这边改变实现以同时提供这种方法的工作,这就是我到目前为止所做的.

public async Task<OutputModel> CalculateAsync(InputModel input)
{
    return await Task.Run(() =>
    {
        return Calculate(input);
    });
}
Run Code Online (Sandbox Code Playgroud)

用法("do do stuff"代码的一部分与服务调用同时运行):

private async Task MakeRequest()
{
    // do some stuff
    var task = CalculateAsync(myInput);
    // do other stuff
    var myOutput = await task; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asynchronous async-await c#-5.0

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

如何(快速)检查UNC路径是否可用

如何检查UNC路径是否可用?我有一个问题,如果共享不可用,检查大约需要半分钟:

var fi = new DirectoryInfo(@"\\hostname\samba-sharename\directory");

if (fi.Exists)
//...
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法来检查文件夹是否可用?我正在使用Windows XP和C#.

c# unc

35
推荐指数
3
解决办法
4万
查看次数

Task.WaitAll和Exceptions

我有异常处理和并行任务的问题.

下面显示的代码启动2个任务并等待它们完成.我的问题是,如果任务抛出异常,则永远不会到达catch处理程序.

        List<Task> tasks = new List<Task>();
        try
        {                
            tasks.Add(Task.Factory.StartNew(TaskMethod1));
            tasks.Add(Task.Factory.StartNew(TaskMethod2));

            var arr = tasks.ToArray();                
            Task.WaitAll(arr);
        }
        catch (AggregateException e)
        {
            // do something
        }
Run Code Online (Sandbox Code Playgroud)

但是,当我使用以下代码等待超时的任务时,会捕获异常.

 while(!Task.WaitAll(arr,100));
Run Code Online (Sandbox Code Playgroud)

我似乎错过了一些东西,因为文档WaitAll描述了我的第一次尝试是正确的.请帮助我理解它为什么不起作用.

.net c# parallel-processing

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

全景和枢轴控制之间的区别

winphone 7 Panorama和Pivot Controls之间有什么区别?对我来说,它们看起来非常相似,除了略有不同的视觉外观.在哪种情况下应该使用其中一种?

c# windows-phone-7

23
推荐指数
2
解决办法
7596
查看次数

字符串格式描述性文本

是否可以在字符串格式说明符中添加一些描述性文本?

例:

  string.Format ("{0:ForeName} is not at home", person.ForeName); 
Run Code Online (Sandbox Code Playgroud)

在示例ForeName中添加了描述.

上面的语法显然是不正确的,但只是为了表明这个想法.

我问的原因是因为在我的情况下字符串是在资源文件中,所以在你目前只看到的资源文件中

   {0} is not at home
Run Code Online (Sandbox Code Playgroud)

在某些情况下,很难掌握其背景{0}.

编辑:

在c#6中$引入了与运算符的字符串插值,因此string.Format不再需要:

$"{person.ForeName} is not at home";
Run Code Online (Sandbox Code Playgroud)

c#

18
推荐指数
3
解决办法
1516
查看次数

自升级到Visual Studio 2017 15.3.0以来,应用程序中出现奇怪的调试输出

自从我升级到Visual Studio 2017 15.3.0后,我的xamarin android应用程序不断打印以下调试输出:

08-15 09:13:23.275 D/Mono    ( 3119): [0x9a5be930] worker unparking, timeout? no interrupted? no
08-15 09:13:23.275 D/Mono    ( 3119): [0x9a5be930] worker parking
08-15 09:13:23.275 D/Mono    ( 3119): [0x9a6bf930] worker unparking, timeout? no interrupted? no
08-15 09:13:23.275 D/Mono    ( 3119): [0x9a6bf930] worker parking
08-15 09:13:24.275 D/Mono    ( 3119): [0x9a87d930] worker unparking, timeout? no interrupted? no
08-15 09:13:24.276 D/Mono    ( 3119): [0x9a87d930] worker parking
Run Code Online (Sandbox Code Playgroud)

输出相当规律,每秒几次.

它意味着什么以及可能导致什么?

编辑:现在有关于此错误报告

c# mono android xamarin

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

Xamarin与Fody.WeavingTask和SolutionDir有关

我一直在尝试在我的Xamarin android proyect中使用Realm,其中一个依赖是Fody,每次我尝试运行我的应用程序时都会显示以下错误:错误MSB4044:"Fody.WeavingTask"任务没有给出一个值必需参数"SolutionDir".

我一直在寻找修复,但找不到它,你知道如何赋予它一个价值吗?它在哪里?

对于领域块包我已经创建了FodyWeavers.xml

realm xamarin fody

15
推荐指数
3
解决办法
3807
查看次数

图像源和缓存

我使用以下代码显示来自网络服务器的图像:

   <Image Source="{Binding Url}" />
Run Code Online (Sandbox Code Playgroud)

图像会自动下载,我假设还有一些基于Url的缓存.

我的问题是,当应用程序处于脱机状态时,可能无法显示缓存的图像.

有没有办法改变缓存行为,以便在没有网络可用时加载图像?有关缓存的文档指针也非常有用.

c# windows-phone windows-runtime windows-phone-8

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

单元测试:由于没有正在进行的测试运行,因此无法取消测试运行

当我在VS2012中成功运行单元测试时出现以下错误:

由于没有正在进行的测试运行,因此无法取消测试运行

该错误仅在单元测试成功后出现(在visual studio中进行绿色检查).

为什么我会收到此错误?

visual-studio-2012

12
推荐指数
2
解决办法
1640
查看次数

异步方法在ReactiveUI中使用TestScheduler进行死锁

我正在尝试在测试中使用带有异步方法的reactiveui测试调度程序.

等待异步调用时,测试挂起.

根本原因似乎是异步方法中等待的命令.

    [Fact]
    public async Task Test()
        => await new TestScheduler().With(async scheduler =>
        {
            await SomeAsyncMethod();

            // *** execution never gets here
            Debugger.Break();
        });

    private async Task SomeAsyncMethod()
    {
        var command = ReactiveCommand.CreateFromTask(async () =>
        {
            await Task.Delay(100);
        });

        // *** this hangs
        await command.Execute();
    }
Run Code Online (Sandbox Code Playgroud)

如何与没有死锁的测试调度程序一起执行异步调用?

我正在使用reactiveui 9.4.1

编辑:

我已经尝试了WithAsync()Funks答案中建议的方法,但行为是一样的.

c# reactiveui

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