我需要在控制台应用程序中运行多个异步任务,并在进一步处理之前等待它们全部完成.
那里有很多文章,但我读的越多越好.我已经阅读并理解了Task库的基本原理,但我显然错过了某处的链接.
我知道可以将任务链接起来,以便它们在另一个完成之后开始(这几乎是我读过的所有文章的场景),但我希望我的所有任务同时运行,我想知道一次他们都完成了.
对于这样的场景,最简单的实现是什么?
我想用out参数编写一个异步方法,如下所示:
public async void Method1()
{
int op;
int result = await GetDataTaskAsync(out op);
}
Run Code Online (Sandbox Code Playgroud)
我该怎么办GetDataTaskAsync?
这段代码:
string a = "abc";
string b = "AC";
Console.WriteLine("Length a = {0}", a.Length);
Console.WriteLine("Length b = {0}", b.Length);
Run Code Online (Sandbox Code Playgroud)
输出:
Length a = 3
Length b = 4
Run Code Online (Sandbox Code Playgroud)
为什么?我唯一能想到的是中文字符长度为2个字节,并且该.Length方法返回字节数.
当我在Visual Studio 2010中创建新的Windows服务时,我收到消息,声明使用InstallUtil和net start来运行该服务.
我尝试了以下步骤:
步骤4的输出
运行事务安装.
开始安装的安装阶段.
请参阅日志文件的内容以获取C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestService\obj\x86\Debug\TestService.exe程序集的进度.
该文件位于C:\ Users\myusername\Documents\Visual Studio 2010\Projects\Tes tService\TestService\_dj\x86\Debug\TestService.InstallLog.
安装程序集'C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestS ervice\TestService\_dj\x86\Debug\TestService.exe'.
受影响的参数是:
logtoconsole =
logfile = C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestService\T\testService\_dj\x86\Debug\TestService.InstallLog
assemblypath = C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestServ ice\TestService\obj\x86\Debug\TestService.exe
没有具有RunInstallerAttribute.Yes属性的公共安装程序可以在C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestSe rvice\_ obj\x86\Debug\TestService.exe程序集中找到.
安装阶段成功完成,提交阶段正在开始.
请参阅日志文件的内容以获取C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestService\obj\x86\Debug\TestService.exe程序集的进度.
该文件位于C:\ Users\myusername\Documents\Visual Studio 2010\Projects\Tes tService\TestService\_dj\x86\Debug\TestService.InstallLog.
提交程序集'C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestS ervice\TestService\_obj\x86\Debug\TestService.exe'.
受影响的参数是:
logtoconsole = …
我刚刚在我的.NET 2.0应用程序中运行此异常(ProtocolViolationException)(在Windows Mobile 6标准仿真器上运行).令我困惑的是,据我所知,我没有添加任何内容正文,除非我无意中以某种方式完成了它.我的代码如下(非常简单).还有什么我需要做的是说服.NET这只是一个http GET吗?
谢谢,布莱恩
//run get and grab response
WebRequest request = WebRequest.Create(get.AbsoluteUri + args);
request.Method = "GET";
Stream stream = request.GetRequestStream(); // <= explodes here
XmlTextReader reader = new XmlTextReader(stream);
Run Code Online (Sandbox Code Playgroud) async void 单元测试无法在Visual Studio 2012中运行:
[TestClass]
public class MyTestClass
{
[TestMethod]
public async void InvisibleMyTestMethod()
{
await Task.Delay(1000);
Assert.IsTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想要进行异步单元测试,则测试方法必须返回一个Task:
[TestMethod]
public async Task VisibleMyTestMethod()
{
await Task.Delay(1000);
Assert.IsTrue(true);
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?不是说我绝对需要async void测试方法,我只是好奇.构建async void测试方法时,Visual Studio 2012不会发出警告或错误,即使它无法运行...
我正在开发一个Web API,我想出的一个测试是,如果客户端使用物理测试ID进行GET操作(物理测试是我正在寻找的资源)并且找不到物理测试,Web API应返回404状态.
现在,我正在使用moq框架进行测试,我有以下代码:
[TestMethod]
public void then_if_physical_test_not_found_return_not_found_status()
{
var unitOfWork = new Mock<IUnitOfWork>();
var repository = new Mock<IRepository<PhysicalTest>>();
repository.Setup(r => r.FindById(It.IsAny<int>())).Returns();
unitOfWork.Setup(m => m.PhysicalTests).Returns(repository.Object);
var pt = new PhysicalTestResource(unitOfWork.Object);
HttpResponseMessage<PhysicalTest> response = pt.GetPhysicalTest(43);
Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode)
}
Run Code Online (Sandbox Code Playgroud)
我需要Returns()方法来返回一个null对象,如果找不到资源,它将是实际API方法返回的对象.
我尝试在Returns()方法中将null作为参数发送但没有成功.
如何fg+在C#中声明属性或变量名称?
public string fg+ { get; set; }
Run Code Online (Sandbox Code Playgroud)
我fg+在JSON的响应中得到了一个字段"fg+": "103308076644479658279".
我正在使用类反序列化它.我如何从JSON中读取它?
我有一个非常简单的ASP.NET MVC 4控制器:
public class HomeController : Controller
{
private const string MY_URL = "http://smthing";
private readonly Task<string> task;
public HomeController() { task = DownloadAsync(); }
public ActionResult Index() { return View(); }
private async Task<string> DownloadAsync()
{
using (WebClient myWebClient = new WebClient())
return await myWebClient.DownloadStringTaskAsync(MY_URL)
.ConfigureAwait(false);
}
}
Run Code Online (Sandbox Code Playgroud)
当我启动项目时,我看到了我的视图,它看起来很好,但是当我更新页面时,我收到以下错误:
[InvalidOperationException:在异步操作仍处于挂起状态时完成异步模块或处理程序.
为什么会这样?我做了几个测试:
task = DownloadAsync();从构造函数中删除并将其放入Index方法中它将正常工作而没有错误.DownloadAsync()身体return await Task.Factory.StartNew(() => { Thread.Sleep(3000); return "Give me an error"; });它将正常工作.为什么不可能WebClient.DownloadStringTaskAsync在控制器的构造函数中使用该方法?
最近更新IDEA和Scala插件后出现了scala-2.11文件夹.
它应该用于什么?
c# ×8
.net ×4
async-await ×4
asynchronous ×1
c#-5.0 ×1
installutil ×1
json ×1
mocking ×1
moq ×1
scala ×1
service ×1
string ×1
unicode ×1
unit-testing ×1
wcf-web-api ×1
webclient ×1
webrequest ×1
windows ×1