如何在 UML 序列图中描述 C# yield return?

How to describe C# yield return in UML sequence diagram?

例如,

using System;
using System.Collections;

namespace ConsoleApplication
{
    class A : IEnumerable
    {
        B b;
        public A()
        {
            b = new B();
        }
        public IEnumerator GetEnumerator()
        {
            yield return b.FunA(0);
            yield return b.FunB(1);
            yield return b.FunC(2);
            yield return b.FunD(3);
            yield return b.FunE(4);
        }
    }

    class B
    {
        public int FunA(int x)
        {
            return x;
        }
        public int FunB(int x)
        {
            return x * 2;
        }
        public int FunC(int x)
        {
            return x * 3;
        }
        public int FunD(int x)
        {
            return x * 4;
        }
        public int FunE(int x)
        {
            return x * 5;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var a = new A();
            foreach(var number in a)
            {
                Console.WriteLine(number);
            }
            Console.ReadLine();
        }
    }
}

如何用时序图描述这个程序? 我认为它应该类似于下面的循环或替代部分。

              +------------+ +------------+ +------------+
              |程序 | |一个| |乙 |
              +-----+-----+ +-----+-----+ +-----+-----+
                    | | |
                    | | |
                    | | |
                    | | |
     +-----+---------------------------------------- ------------------+
     |循环| | [0] | | |
     +-----+ | | | |
     | | | | |
     | | | | |
     | | | | |
     +------------------------------------------------ ------------------+
     | | [1] | | |
     | | | | |
     | | | | |
     | | | | |
     | | | | |
     +------------------------------------------------ ------------------+
     | | [2] | | |
     | | | | |
     | | | | |
     | | | | |
     | | | | |
     +------------------------------------------------ ------------------+
     | | [3] | | |
     | | | | |
     | | | | |
     | | | | |
     | | | | |
     +------------------------------------------------ ------------------+
     | | [4] | | |
     | | | | |
     | | | | |
     | | | | |
     | | | | |
     +------------------------------------------------ ------------------+
                    | | |
                    | | |

编辑: 我正在分析Unity3D插件的源代码。 IEnumerator 和 yield 用于实现协程模型。协程被用作线程的替代品。所以在时序图中展示协程的部分逻辑是合理的。

对于序列图,您可以定义循环(while 循环),只要关注 yield 关键字执行,请参考以下内容 link internals of C# interators

我认为link可以帮助您理解为什么 yield 可以表示为循环。