如果不返回任何内容,我是否需要等待异步任务函数?这是否会导致以下代码被包装在委托中并在异步任务函数返回后执行?
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 被包装在委托中并仅在异步任务完成时延迟执行?
像这样的代码,我想将大部分工作放在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)
谢谢.
我有一个问题,给定一个.winmd文件,我们在哪里可以找到真正的实现?.winmd文件就像一个头文件或动态库的.lib文件,它不包含任何实现,我很好奇它的实现在哪里.谢谢.
我有一个配置类商店应用程序配置.目前我正在使用静态类.一些配置与一个主题相关,所以我想将它们组织成一个嵌套类,所以我可以引用这样的配置:
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用来保护公共静态属性.也许我不应该使用嵌套类来实现它?有什么建议?
根据我的理解,如果我等待一个异步函数,那么下面的代码将被包装在一个委托中,并在异步函数返回后执行:
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)
这两种实现之间有什么区别吗?