Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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成为可能时,为什么我们需要生成另一个进程?_C# - Fatal编程技术网

C# 当调用公共Main成为可能时,为什么我们需要生成另一个进程?

C# 当调用公共Main成为可能时,为什么我们需要生成另一个进程?,c#,C#,假设我有3个独立的.net核心控制台应用程序项目:HelloWorld、Consumer和Spawner 假设程序集HelloWorld来自第三方。我知道它的Main方法是公开的 HelloWorld: namespace HelloWorld { public class HelloWorld { public static void Main() { Console.WriteLine("Hello World");

假设我有3个独立的.net核心控制台应用程序项目:
HelloWorld
Consumer
Spawner


假设程序集
HelloWorld
来自第三方。我知道它的
Main
方法是公开的

HelloWorld:

namespace HelloWorld
{
    public class HelloWorld
    {
        public static void  Main()
        {
            Console.WriteLine("Hello World");
        }
    }
} 
namespace Consumer
{
    class Consumer
    {
        static void  Main()
        {
            HelloWorld.HelloWorld.Main();
        }
    }
} 
namespace Spawner
{
    class Spawner
    {
        static void  Main()
        {
            Process p = new Process();
            p.StartInfo.FileName = "HelloWorld.exe";
            p.Start();
            p.WaitForExit();
        }
    }
} 
消费者:

namespace HelloWorld
{
    public class HelloWorld
    {
        public static void  Main()
        {
            Console.WriteLine("Hello World");
        }
    }
} 
namespace Consumer
{
    class Consumer
    {
        static void  Main()
        {
            HelloWorld.HelloWorld.Main();
        }
    }
} 
namespace Spawner
{
    class Spawner
    {
        static void  Main()
        {
            Process p = new Process();
            p.StartInfo.FileName = "HelloWorld.exe";
            p.Start();
            p.WaitForExit();
        }
    }
} 
产卵器:

namespace HelloWorld
{
    public class HelloWorld
    {
        public static void  Main()
        {
            Console.WriteLine("Hello World");
        }
    }
} 
namespace Consumer
{
    class Consumer
    {
        static void  Main()
        {
            HelloWorld.HelloWorld.Main();
        }
    }
} 
namespace Spawner
{
    class Spawner
    {
        static void  Main()
        {
            Process p = new Process();
            p.StartInfo.FileName = "HelloWorld.exe";
            p.Start();
            p.WaitForExit();
        }
    }
} 
问题 现在我想使用
HelloWorld
程序集。 我必须实现哪种方法,像在
Consumer
项目中那样调用,还是像在
Spawner
项目中那样生成

调用程序集的
public Main
和使用
进程调用程序集之间有什么区别


我在想为什么我们不总是将
Main
公开,以便其他人可以通过两个选项调用它:调用方法或生成新进程。还是我的理解错了?欢迎任何意见

你几乎回答自己,你不需要产生一个单独的过程。您可以从不同的控制台应用程序调用public
Main()
,它将正常工作


然而,如果你遇到这样的情况,你可能会问自己,为什么这些首先是分开的。不同的入口点是保持这些东西彼此独立运行、单独部署等所必需的。最明显的最大区别是,当生成不同的进程时,它会自动完全并行运行。

您几乎回答自己,您不需要生成单独的进程。您可以从不同的控制台应用程序调用public
Main()
,它将正常工作

然而,如果你遇到这样的情况,你可能会问自己,为什么这些首先是分开的。不同的入口点是保持这些东西彼此独立运行、单独部署等所必需的。最明显的最大区别是,当生成不同的进程时,它会自动完全并行运行

调用程序集的public Main和使用进程调用程序集之间有什么区别

Consumer.Main
调用
HelloWorld.Main
就像调用任何其他方法一样,因此
HelloWorld.Main
Consumer
相同的进程(和线程等)中运行。您可以向它传递强类型参数,
HelloWorld
Consumer
将共享
静态
状态,如果一个部分导致崩溃,两个部分都将停止,等等

Spawner.Main
启动一个单独的进程;看见就像您自己在命令行上调用了
HelloWorld
Spawner
HelloWorld
之间没有共享状态。进程
Spawner
启动甚至不需要用C#或.NET编写

通常:

  • 如果
    HelloWorld
    是一个库,那么编写
    HelloWorld
    的人希望您引用它并从自己的代码中调用它。但是像
    Main
    这样的名称在这种情况下非常罕见;通常有许多方法可以调用来执行不同的操作,它们有更具体的名称、参数、返回类型等

  • 如果
    HelloWorld
    是一个独立的应用程序,那么编写
    HelloWorld
    的人希望您将其作为一个单独的进程调用,包括从可能与调用方不同的技术堆栈调用。(例如,C#可以使用
    进程
    对象启动用许多其他语言编写的程序的进程。)

我在想为什么我们不总是公开Main,允许其他人使用两个选项调用程序集:调用方法或生成新进程

你并不总是想让人们做出选择。也许你的
Main
做了其他程序需要的一些基本设置-在这种情况下,你不希望其他人调用你的
Main
,作为某个单独程序的一部分,可能设置不同

调用程序集的public Main和使用进程调用程序集之间有什么区别

Consumer.Main
调用
HelloWorld.Main
就像调用任何其他方法一样,因此
HelloWorld.Main
Consumer
相同的进程(和线程等)中运行。您可以向它传递强类型参数,
HelloWorld
Consumer
将共享
静态
状态,如果一个部分导致崩溃,两个部分都将停止,等等

Spawner.Main
启动一个单独的进程;看见就像您自己在命令行上调用了
HelloWorld
Spawner
HelloWorld
之间没有共享状态。进程
Spawner
启动甚至不需要用C#或.NET编写

通常:

  • 如果
    HelloWorld
    是一个库,那么编写
    HelloWorld
    的人希望您引用它并从自己的代码中调用它。但是像
    Main
    这样的名称在这种情况下非常罕见;通常有许多方法可以调用来执行不同的操作,它们有更具体的名称、参数、返回类型等

  • 如果
    HelloWorld
    是一个独立的应用程序,那么编写
    HelloWorld
    的人希望您将其作为一个单独的进程调用,包括从可能与调用方不同的技术堆栈调用。(例如,C#可以使用
    进程
    对象启动用许多其他语言编写的程序的进程。)

我在想为什么我们不总是