Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确调用Main中的wait方法? 使用系统; 使用System.Collections.Generic; 使用System.IO; 使用System.Linq; 使用系统文本; 使用System.Threading.Tasks; 命名空间任务控制台 { 班级计划 { 静态void Main(字符串[]参数) { test(); } 静态异步任务ReadTextAsync() { 字符串文本内容; 任务阅读; 使用(StreamReader=File.OpenText(“email.txt”)) { readFromText=reader.ReadToEndAsync(); text内容=等待从文本读取; } 返回文本内容; } 静态异步任务测试() { 字符串捕获=等待ReadTextAsync(); 控制台写入线(捕获); } } }_C#_Asynchronous_Async Await - Fatal编程技术网

C# 如何正确调用Main中的wait方法? 使用系统; 使用System.Collections.Generic; 使用System.IO; 使用System.Linq; 使用系统文本; 使用System.Threading.Tasks; 命名空间任务控制台 { 班级计划 { 静态void Main(字符串[]参数) { test(); } 静态异步任务ReadTextAsync() { 字符串文本内容; 任务阅读; 使用(StreamReader=File.OpenText(“email.txt”)) { readFromText=reader.ReadToEndAsync(); text内容=等待从文本读取; } 返回文本内容; } 静态异步任务测试() { 字符串捕获=等待ReadTextAsync(); 控制台写入线(捕获); } } }

C# 如何正确调用Main中的wait方法? 使用系统; 使用System.Collections.Generic; 使用System.IO; 使用System.Linq; 使用系统文本; 使用System.Threading.Tasks; 命名空间任务控制台 { 班级计划 { 静态void Main(字符串[]参数) { test(); } 静态异步任务ReadTextAsync() { 字符串文本内容; 任务阅读; 使用(StreamReader=File.OpenText(“email.txt”)) { readFromText=reader.ReadToEndAsync(); text内容=等待从文本读取; } 返回文本内容; } 静态异步任务测试() { 字符串捕获=等待ReadTextAsync(); 控制台写入线(捕获); } } },c#,asynchronous,async-await,C#,Asynchronous,Async Await,我使用async从文本文件中读取以下代码。我从中了解到,Microsoft使用StreamReader实现的示例是不正确的,因此作为学习练习,我决定更正它。当测试方法不返回任何任务时,如何从main正确调用测试方法。我读了一些书,了解到使用async void是一种不好的做法。就我而言,我该怎么办 旁注:我不知道我是否实现了错误,但我无法显示我的文本。我尝试了非异步方式,但效果很好,但是,当我使用异步时,它显示为空白,请按任意键继续“ 当测试开始时,我如何正确地从main调用测试方法 方法不返回

我使用async从文本文件中读取以下代码。我从中了解到,Microsoft使用StreamReader实现的示例是不正确的,因此作为学习练习,我决定更正它。当测试方法不返回任何任务时,如何从main正确调用测试方法。我读了一些书,了解到使用async void是一种不好的做法。就我而言,我该怎么办

旁注:我不知道我是否实现了错误,但我无法显示我的文本。我尝试了非异步方式,但效果很好,但是,当我使用异步时,它显示为空白,请按任意键继续“

当测试开始时,我如何正确地从main调用测试方法 方法不返回任何任务

由于无法将
Main
修改为
async
,因此必须明确调用
任务。请等待它:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskConsole
{
    class Program
    {
        static void Main(string[] args)
        {       
             test();    
        }

        static async Task<string> ReadTextAsync() 
        {
            string textContents;
            Task<string> readFromText;

            using (StreamReader reader =  File.OpenText("email.txt"))
            {
                readFromText = reader.ReadToEndAsync();
                textContents = await readFromText;

            }

            return textContents;     
        }

        static async Task test ()
        {
            string capture = await ReadTextAsync();
            Console.WriteLine(capture);
        }               
    }               
}
这是异步调用中唯一应该阻止的位置

Test().Wait();
当测试开始时,我如何正确地从main调用测试方法 方法不返回任何任务

由于无法将
Main
修改为
async
,因此必须明确调用
任务。请等待它:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskConsole
{
    class Program
    {
        static void Main(string[] args)
        {       
             test();    
        }

        static async Task<string> ReadTextAsync() 
        {
            string textContents;
            Task<string> readFromText;

            using (StreamReader reader =  File.OpenText("email.txt"))
            {
                readFromText = reader.ReadToEndAsync();
                textContents = await readFromText;

            }

            return textContents;     
        }

        static async Task test ()
        {
            string capture = await ReadTextAsync();
            Console.WriteLine(capture);
        }               
    }               
}
这是异步调用中唯一应该阻止的位置。

静态异步任务readtextask async()
Test().Wait();
{ 字符串文本内容; 任务阅读; 使用(StreamReader=File.OpenText(“email.txt”)) { readFromText=wait Task.Run(()=>reader!=null?reader.ReadToEndAsync():null); text内容=readFromText; } 返回文本内容; } 静态任务测试() { 字符串捕获=ReadTextAsync(); 控制台写入线(捕获); }
静态异步任务ReadTextAsync()
{
字符串文本内容;
任务阅读;
使用(StreamReader=File.OpenText(“email.txt”))
{
readFromText=wait Task.Run(()=>reader!=null?reader.ReadToEndAsync():null);
text内容=readFromText;
}
返回文本内容;
}
静态任务测试()
{
字符串捕获=ReadTextAsync();
控制台写入线(捕获);
}               

在等待并使其同步时,为什么要异步执行此操作?为实现默认同步流付出了大量努力?@sstan-它可以工作!谢谢。@Belogix-没有特别的原因,正如我在上面的帖子中所说,Microsoft实现了错误,因此作为一个学习练习,我决定更正它。可能是duplic你们中的任何一个人都不需要在两个地方都有等待。既然你们正在等待它并使它同步,为什么要异步进行此操作?为了实现默认的同步流,付出了很多努力?@sstan-它可以工作!谢谢。@Belogix-没有特别的原因,正如我在上面的帖子中所说的,微软实现了错误,所以作为一个学习在一个不确定的练习中,我决定更正它。您的可能副本不需要在两个位置都使用wait。在WPF中,我应该从异步方法调用correct?@Nexusfactor,在WPF中,您应该使用
wait Test()
。根据上面的评论,我不需要在这两个地方都等待,只是为了我自己的理解,您将如何更正它?在WPF中,我应该从异步方法调用correct?@Nexusfactor在WPF中,您应该使用
wait Test()
。根据上面的评论,我不需要在两个地方都等待,只是为了我自己的理解,你会如何纠正它?只是出于好奇,我以前的方式,是不是不正确?与你所展示的方式相比,我现在的方式有什么缺点?只是出于好奇,我当时的方式以前,这是一种不正确的方式吗?与你展示的方式相比,我现在的方式有什么缺点?