小编cod*_*ior的帖子

如果我不关心它的返回值,我应该等待“异步任务”函数吗?

如果不返回任何内容,我是否需要等待异步任务函数?这是否会导致以下代码被包装在委托中并在异步任务函数返回后执行?

Task DoSomethingAsync()
{
    return Task.Run(() =>
    {
        // Do something, but doesn't return values.
    });
}

void Test()
{
    DoSomethingAsync();  // should I await?

    // Do other things, totally not related to the async function
    Console.WriteLine("aaa");
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,如果我在 Test() 中等待 DoSomethingAsync(),是否会导致以下代码 Console.WriteLine 被包装在委托中并仅在异步任务完成时延迟执行?

c# asynchronous

7
推荐指数
2
解决办法
4374
查看次数

可以在使用语句中调用Task.Run吗?

像这样的代码,我想将大部分工作放在Task.Run中,但我不确定using语句是否仍然按预期工作.

using(MemoryStream ms = new MemoryStream())
{
    Task.Run(() => 
    { 
         /* capture ms and process the stream */ 
    }
}  // Will ms will be disposed here automatically?
Run Code Online (Sandbox Code Playgroud)

谢谢.

.net task-parallel-library

6
推荐指数
1
解决办法
611
查看次数

给定.winmd文件,我们在哪里可以找到真正的实现DLL?

我有一个问题,给定一个.winmd文件,我们在哪里可以找到真正的实现?.winmd文件就像一个头文件或动态库的.lib文件,它不包含任何实现,我很好奇它的实现在哪里.谢谢.

.net windows-runtime winmd

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

如何在C#中限制对其容器的嵌套类的访问?

我有一个配置类商店应用程序配置.目前我正在使用静态类.一些配置与一个主题相关,所以我想将它们组织成一个嵌套类,所以我可以引用这样的配置:

AppConfig.Url
AppConfig.LogSettings.FileSize
Run Code Online (Sandbox Code Playgroud)

我有两个选项,要么使用静态嵌套类,

public static class AppConfig
{
    public static class LogSettings
    {
        public static int FileSize {get; set;}
    }
}
Run Code Online (Sandbox Code Playgroud)

或声明一个类但添加一个静态属性:

public static class AppConfig
{
    public class LogSettings
    {
        public int FileSize {get; set;}
    }

    public static LogSettings logSettings { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,它们都不能保护被其他类修改的嵌套类成员FileSize,即使我private set用来保护公共静态属性.也许我不应该使用嵌套类来实现它?有什么建议?

c# inner-classes access-levels

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

在 await 之后放置代码与使用 ContinueWith 的链代码有什么区别

根据我的理解,如果我等待一个异步函数,那么下面的代码将被包装在一个委托中,并在异步函数返回后执行:

async bool Test()
{
    await byte[] arr = ReadAsync(....)

    // all following code will be wrapped into a delegate
    if (arr != null)
    {
        // Do something

        return true;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

如果我将以下代码显式包装在 ContinueWith 中,这听起来等于:

async bool Test()
{
    bool res = await ReadAsync(...)
                    .ContinueWith(t => 
                    {
                        byte[] arr = t.Result;
                        if (arr != null)
                        {
                            // Do something
                            return true;
                        }
                        return false;
                    });
}
Run Code Online (Sandbox Code Playgroud)

这两种实现之间有什么区别吗?

c# asynchronous

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