This commit is contained in:
Santarh
2022-09-08 09:06:59 +00:00
parent 6c4c31ae5b
commit ff961365b4
8 changed files with 124 additions and 58 deletions

Binary file not shown.

View File

@@ -362,8 +362,14 @@
<span class="linenos">31</span><span class="w"> </span><span class="c1">/// &lt;typeparam name="T"&gt;&lt;/typeparam&gt;</span>
<span class="linenos">32</span><span class="w"> </span><span class="c1">/// &lt;returns&gt;&lt;/returns&gt;</span>
<span class="linenos">33</span><span class="w"> </span><span class="n">Task</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span><span class="w"> </span><span class="n">Run</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;(</span><span class="n">Func</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span><span class="w"> </span><span class="n">action</span><span class="p">);</span><span class="w"></span>
<span class="linenos">34</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">35</span><span class="p">}</span><span class="w"></span>
<span class="linenos">34</span>
<span class="linenos">35</span><span class="w"> </span><span class="c1">/// &lt;summary&gt;</span>
<span class="linenos">36</span><span class="w"> </span><span class="c1">/// 指定した時間が経過している場合のみ、NextFrame() を使って1フレーム待つ</span>
<span class="linenos">37</span><span class="w"> </span><span class="c1">/// &lt;/summary&gt;</span>
<span class="linenos">38</span><span class="w"> </span><span class="c1">/// &lt;returns&gt;タイムアウト時はNextFrame()を呼び出す。そうではない場合、Task.CompletedTaskを返す&lt;/returns&gt;</span>
<span class="linenos">39</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">NextFrameIfTimedOut</span><span class="p">();</span><span class="w"></span>
<span class="linenos">40</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">41</span><span class="p">}</span><span class="w"></span>
</pre></div>
</div>
<ul class="simple">
@@ -403,8 +409,10 @@
<span class="linenos">23</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">24</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Task</span><span class="p">.</span><span class="n">FromResult</span><span class="p">(</span><span class="n">action</span><span class="p">());</span><span class="w"></span>
<span class="linenos">25</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">26</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">27</span><span class="p">}</span><span class="w"></span>
<span class="linenos">26</span>
<span class="linenos">27</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">NextFrameIfTimedOut</span><span class="p">()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">NextFrame</span><span class="p">();</span><span class="w"></span>
<span class="linenos">28</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">29</span><span class="p">}</span><span class="w"></span>
</pre></div>
</div>
</section>
@@ -426,30 +434,55 @@
<span class="linenos">10</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="k">sealed</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">RuntimeOnlyAwaitCaller</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">IAwaitCaller</span><span class="w"></span>
<span class="linenos">11</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">12</span><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="k">readonly</span><span class="w"> </span><span class="n">NextFrameTaskScheduler</span><span class="w"> </span><span class="n">_scheduler</span><span class="p">;</span><span class="w"></span>
<span class="linenos">13</span>
<span class="linenos">14</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="nf">RuntimeOnlyAwaitCaller</span><span class="p">()</span><span class="w"></span>
<span class="linenos">15</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">16</span><span class="w"> </span><span class="n">_scheduler</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NextFrameTaskScheduler</span><span class="p">();</span><span class="w"></span>
<span class="linenos">17</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">18</span>
<span class="linenos">19</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">NextFrame</span><span class="p">()</span><span class="w"></span>
<span class="linenos">20</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">21</span><span class="w"> </span><span class="kt">var</span><span class="w"> </span><span class="n">tcs</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TaskCompletionSource</span><span class="p">&lt;</span><span class="kt">object</span><span class="p">&gt;();</span><span class="w"></span>
<span class="linenos">22</span><span class="w"> </span><span class="n">_scheduler</span><span class="p">.</span><span class="n">Enqueue</span><span class="p">(()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">tcs</span><span class="p">.</span><span class="n">SetResult</span><span class="p">(</span><span class="k">default</span><span class="p">));</span><span class="w"></span>
<span class="linenos">23</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">tcs</span><span class="p">.</span><span class="n">Task</span><span class="p">;</span><span class="w"></span>
<span class="linenos">24</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">25</span>
<span class="linenos">26</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">Run</span><span class="p">(</span><span class="n">Action</span><span class="w"> </span><span class="n">action</span><span class="p">)</span><span class="w"></span>
<span class="linenos">27</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">28</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Task</span><span class="p">.</span><span class="n">Run</span><span class="p">(</span><span class="n">action</span><span class="p">);</span><span class="w"></span>
<span class="linenos">29</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">30</span>
<span class="linenos">31</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span><span class="w"> </span><span class="n">Run</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;(</span><span class="n">Func</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span><span class="w"> </span><span class="n">action</span><span class="p">)</span><span class="w"></span>
<span class="linenos">32</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">33</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Task</span><span class="p">.</span><span class="n">Run</span><span class="p">(</span><span class="n">action</span><span class="p">);</span><span class="w"></span>
<span class="linenos">34</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">35</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">36</span><span class="p">}</span><span class="w"></span>
<span class="linenos">13</span><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="k">readonly</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="n">_timeOutInSeconds</span><span class="p">;</span><span class="w"></span>
<span class="linenos">14</span><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="n">_lastTimeoutBaseTime</span><span class="p">;</span><span class="w"></span>
<span class="linenos">15</span>
<span class="linenos">16</span><span class="w"> </span><span class="c1">/// &lt;summary&gt;</span>
<span class="linenos">17</span><span class="w"> </span><span class="c1">/// タイムアウト指定可能なコンストラクタ</span>
<span class="linenos">18</span><span class="w"> </span><span class="c1">/// &lt;/summary&gt;</span>
<span class="linenos">19</span><span class="w"> </span><span class="c1">/// &lt;param name="timeOutInSeconds"&gt;NextFrameIfTimedOutがタイムアウトと見なす時間(秒単位)&lt;/param&gt;</span>
<span class="linenos">20</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="nf">RuntimeOnlyAwaitCaller</span><span class="p">(</span><span class="kt">float</span><span class="w"> </span><span class="n">timeOutInSeconds</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="m">1f</span><span class="w"> </span><span class="p">/</span><span class="w"> </span><span class="m">1000f</span><span class="p">)</span><span class="w"></span>
<span class="linenos">21</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">22</span><span class="w"> </span><span class="n">_scheduler</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NextFrameTaskScheduler</span><span class="p">();</span><span class="w"></span>
<span class="linenos">23</span><span class="w"> </span><span class="n">_timeOutInSeconds</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">timeOutInSeconds</span><span class="p">;</span><span class="w"></span>
<span class="linenos">24</span><span class="w"> </span><span class="n">ResetLastTimeoutBaseTime</span><span class="p">();</span><span class="w"></span>
<span class="linenos">25</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">26</span>
<span class="linenos">27</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">NextFrame</span><span class="p">()</span><span class="w"></span>
<span class="linenos">28</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">29</span><span class="w"> </span><span class="n">ResetLastTimeoutBaseTime</span><span class="p">();</span><span class="w"></span>
<span class="linenos">30</span><span class="w"> </span><span class="kt">var</span><span class="w"> </span><span class="n">tcs</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TaskCompletionSource</span><span class="p">&lt;</span><span class="kt">object</span><span class="p">&gt;();</span><span class="w"></span>
<span class="linenos">31</span><span class="w"> </span><span class="n">_scheduler</span><span class="p">.</span><span class="n">Enqueue</span><span class="p">(()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">tcs</span><span class="p">.</span><span class="n">SetResult</span><span class="p">(</span><span class="k">default</span><span class="p">));</span><span class="w"></span>
<span class="linenos">32</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">tcs</span><span class="p">.</span><span class="n">Task</span><span class="p">;</span><span class="w"></span>
<span class="linenos">33</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">34</span>
<span class="linenos">35</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">Run</span><span class="p">(</span><span class="n">Action</span><span class="w"> </span><span class="n">action</span><span class="p">)</span><span class="w"></span>
<span class="linenos">36</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">37</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Task</span><span class="p">.</span><span class="n">Run</span><span class="p">(</span><span class="n">action</span><span class="p">);</span><span class="w"></span>
<span class="linenos">38</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">39</span>
<span class="linenos">40</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span><span class="w"> </span><span class="n">Run</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;(</span><span class="n">Func</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span><span class="w"> </span><span class="n">action</span><span class="p">)</span><span class="w"></span>
<span class="linenos">41</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">42</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Task</span><span class="p">.</span><span class="n">Run</span><span class="p">(</span><span class="n">action</span><span class="p">);</span><span class="w"></span>
<span class="linenos">43</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">44</span>
<span class="linenos">45</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">NextFrameIfTimedOut</span><span class="p">()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">CheckTimeout</span><span class="p">()</span><span class="w"> </span><span class="p">?</span><span class="w"> </span><span class="n">NextFrame</span><span class="p">()</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">Task</span><span class="p">.</span><span class="n">CompletedTask</span><span class="p">;</span><span class="w"></span>
<span class="linenos">46</span>
<span class="linenos">47</span><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="k">void</span><span class="w"> </span><span class="nf">ResetLastTimeoutBaseTime</span><span class="p">()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">_lastTimeoutBaseTime</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="m">0f</span><span class="p">;</span><span class="w"></span>
<span class="linenos">48</span>
<span class="linenos">49</span><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">LastTimeoutBaseTimeNeedsReset</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">_lastTimeoutBaseTime</span><span class="w"> </span><span class="p">==</span><span class="w"> </span><span class="m">0f</span><span class="p">;</span><span class="w"></span>
<span class="linenos">50</span>
<span class="linenos">51</span><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="nf">CheckTimeout</span><span class="p">()</span><span class="w"></span>
<span class="linenos">52</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">53</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">UnityEngine</span><span class="p">.</span><span class="n">Time</span><span class="p">.</span><span class="n">realtimeSinceStartup</span><span class="p">;</span><span class="w"></span>
<span class="linenos">54</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">LastTimeoutBaseTimeNeedsReset</span><span class="p">)</span><span class="w"></span>
<span class="linenos">55</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">56</span><span class="w"> </span><span class="n">_lastTimeoutBaseTime</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">t</span><span class="p">;</span><span class="w"></span>
<span class="linenos">57</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">58</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">t</span><span class="w"> </span><span class="p">-</span><span class="w"> </span><span class="n">_lastTimeoutBaseTime</span><span class="p">)</span><span class="w"> </span><span class="p">&gt;=</span><span class="w"> </span><span class="n">_timeOutInSeconds</span><span class="p">;</span><span class="w"></span>
<span class="linenos">59</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">60</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">61</span><span class="p">}</span><span class="w"></span>
</pre></div>
</div>
</section>

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -361,8 +361,14 @@
<span class="linenos">31</span><span class="w"> </span><span class="c1">/// &lt;typeparam name="T"&gt;&lt;/typeparam&gt;</span>
<span class="linenos">32</span><span class="w"> </span><span class="c1">/// &lt;returns&gt;&lt;/returns&gt;</span>
<span class="linenos">33</span><span class="w"> </span><span class="n">Task</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span><span class="w"> </span><span class="n">Run</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;(</span><span class="n">Func</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span><span class="w"> </span><span class="n">action</span><span class="p">);</span><span class="w"></span>
<span class="linenos">34</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">35</span><span class="p">}</span><span class="w"></span>
<span class="linenos">34</span>
<span class="linenos">35</span><span class="w"> </span><span class="c1">/// &lt;summary&gt;</span>
<span class="linenos">36</span><span class="w"> </span><span class="c1">/// 指定した時間が経過している場合のみ、NextFrame() を使って1フレーム待つ</span>
<span class="linenos">37</span><span class="w"> </span><span class="c1">/// &lt;/summary&gt;</span>
<span class="linenos">38</span><span class="w"> </span><span class="c1">/// &lt;returns&gt;タイムアウト時はNextFrame()を呼び出す。そうではない場合、Task.CompletedTaskを返す&lt;/returns&gt;</span>
<span class="linenos">39</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">NextFrameIfTimedOut</span><span class="p">();</span><span class="w"></span>
<span class="linenos">40</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">41</span><span class="p">}</span><span class="w"></span>
</pre></div>
</div>
<ul class="simple">
@@ -402,8 +408,10 @@
<span class="linenos">23</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">24</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Task</span><span class="p">.</span><span class="n">FromResult</span><span class="p">(</span><span class="n">action</span><span class="p">());</span><span class="w"></span>
<span class="linenos">25</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">26</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">27</span><span class="p">}</span><span class="w"></span>
<span class="linenos">26</span>
<span class="linenos">27</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">NextFrameIfTimedOut</span><span class="p">()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">NextFrame</span><span class="p">();</span><span class="w"></span>
<span class="linenos">28</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">29</span><span class="p">}</span><span class="w"></span>
</pre></div>
</div>
</section>
@@ -425,30 +433,55 @@
<span class="linenos">10</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="k">sealed</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">RuntimeOnlyAwaitCaller</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">IAwaitCaller</span><span class="w"></span>
<span class="linenos">11</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">12</span><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="k">readonly</span><span class="w"> </span><span class="n">NextFrameTaskScheduler</span><span class="w"> </span><span class="n">_scheduler</span><span class="p">;</span><span class="w"></span>
<span class="linenos">13</span>
<span class="linenos">14</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="nf">RuntimeOnlyAwaitCaller</span><span class="p">()</span><span class="w"></span>
<span class="linenos">15</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">16</span><span class="w"> </span><span class="n">_scheduler</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NextFrameTaskScheduler</span><span class="p">();</span><span class="w"></span>
<span class="linenos">17</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">18</span>
<span class="linenos">19</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">NextFrame</span><span class="p">()</span><span class="w"></span>
<span class="linenos">20</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">21</span><span class="w"> </span><span class="kt">var</span><span class="w"> </span><span class="n">tcs</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TaskCompletionSource</span><span class="p">&lt;</span><span class="kt">object</span><span class="p">&gt;();</span><span class="w"></span>
<span class="linenos">22</span><span class="w"> </span><span class="n">_scheduler</span><span class="p">.</span><span class="n">Enqueue</span><span class="p">(()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">tcs</span><span class="p">.</span><span class="n">SetResult</span><span class="p">(</span><span class="k">default</span><span class="p">));</span><span class="w"></span>
<span class="linenos">23</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">tcs</span><span class="p">.</span><span class="n">Task</span><span class="p">;</span><span class="w"></span>
<span class="linenos">24</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">25</span>
<span class="linenos">26</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">Run</span><span class="p">(</span><span class="n">Action</span><span class="w"> </span><span class="n">action</span><span class="p">)</span><span class="w"></span>
<span class="linenos">27</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">28</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Task</span><span class="p">.</span><span class="n">Run</span><span class="p">(</span><span class="n">action</span><span class="p">);</span><span class="w"></span>
<span class="linenos">29</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">30</span>
<span class="linenos">31</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span><span class="w"> </span><span class="n">Run</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;(</span><span class="n">Func</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span><span class="w"> </span><span class="n">action</span><span class="p">)</span><span class="w"></span>
<span class="linenos">32</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">33</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Task</span><span class="p">.</span><span class="n">Run</span><span class="p">(</span><span class="n">action</span><span class="p">);</span><span class="w"></span>
<span class="linenos">34</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">35</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">36</span><span class="p">}</span><span class="w"></span>
<span class="linenos">13</span><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="k">readonly</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="n">_timeOutInSeconds</span><span class="p">;</span><span class="w"></span>
<span class="linenos">14</span><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="n">_lastTimeoutBaseTime</span><span class="p">;</span><span class="w"></span>
<span class="linenos">15</span>
<span class="linenos">16</span><span class="w"> </span><span class="c1">/// &lt;summary&gt;</span>
<span class="linenos">17</span><span class="w"> </span><span class="c1">/// タイムアウト指定可能なコンストラクタ</span>
<span class="linenos">18</span><span class="w"> </span><span class="c1">/// &lt;/summary&gt;</span>
<span class="linenos">19</span><span class="w"> </span><span class="c1">/// &lt;param name="timeOutInSeconds"&gt;NextFrameIfTimedOutがタイムアウトと見なす時間(秒単位)&lt;/param&gt;</span>
<span class="linenos">20</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="nf">RuntimeOnlyAwaitCaller</span><span class="p">(</span><span class="kt">float</span><span class="w"> </span><span class="n">timeOutInSeconds</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="m">1f</span><span class="w"> </span><span class="p">/</span><span class="w"> </span><span class="m">1000f</span><span class="p">)</span><span class="w"></span>
<span class="linenos">21</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">22</span><span class="w"> </span><span class="n">_scheduler</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NextFrameTaskScheduler</span><span class="p">();</span><span class="w"></span>
<span class="linenos">23</span><span class="w"> </span><span class="n">_timeOutInSeconds</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">timeOutInSeconds</span><span class="p">;</span><span class="w"></span>
<span class="linenos">24</span><span class="w"> </span><span class="n">ResetLastTimeoutBaseTime</span><span class="p">();</span><span class="w"></span>
<span class="linenos">25</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">26</span>
<span class="linenos">27</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">NextFrame</span><span class="p">()</span><span class="w"></span>
<span class="linenos">28</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">29</span><span class="w"> </span><span class="n">ResetLastTimeoutBaseTime</span><span class="p">();</span><span class="w"></span>
<span class="linenos">30</span><span class="w"> </span><span class="kt">var</span><span class="w"> </span><span class="n">tcs</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TaskCompletionSource</span><span class="p">&lt;</span><span class="kt">object</span><span class="p">&gt;();</span><span class="w"></span>
<span class="linenos">31</span><span class="w"> </span><span class="n">_scheduler</span><span class="p">.</span><span class="n">Enqueue</span><span class="p">(()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">tcs</span><span class="p">.</span><span class="n">SetResult</span><span class="p">(</span><span class="k">default</span><span class="p">));</span><span class="w"></span>
<span class="linenos">32</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">tcs</span><span class="p">.</span><span class="n">Task</span><span class="p">;</span><span class="w"></span>
<span class="linenos">33</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">34</span>
<span class="linenos">35</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">Run</span><span class="p">(</span><span class="n">Action</span><span class="w"> </span><span class="n">action</span><span class="p">)</span><span class="w"></span>
<span class="linenos">36</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">37</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Task</span><span class="p">.</span><span class="n">Run</span><span class="p">(</span><span class="n">action</span><span class="p">);</span><span class="w"></span>
<span class="linenos">38</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">39</span>
<span class="linenos">40</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span><span class="w"> </span><span class="n">Run</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;(</span><span class="n">Func</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span><span class="w"> </span><span class="n">action</span><span class="p">)</span><span class="w"></span>
<span class="linenos">41</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">42</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Task</span><span class="p">.</span><span class="n">Run</span><span class="p">(</span><span class="n">action</span><span class="p">);</span><span class="w"></span>
<span class="linenos">43</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">44</span>
<span class="linenos">45</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Task</span><span class="w"> </span><span class="nf">NextFrameIfTimedOut</span><span class="p">()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">CheckTimeout</span><span class="p">()</span><span class="w"> </span><span class="p">?</span><span class="w"> </span><span class="n">NextFrame</span><span class="p">()</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">Task</span><span class="p">.</span><span class="n">CompletedTask</span><span class="p">;</span><span class="w"></span>
<span class="linenos">46</span>
<span class="linenos">47</span><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="k">void</span><span class="w"> </span><span class="nf">ResetLastTimeoutBaseTime</span><span class="p">()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">_lastTimeoutBaseTime</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="m">0f</span><span class="p">;</span><span class="w"></span>
<span class="linenos">48</span>
<span class="linenos">49</span><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">LastTimeoutBaseTimeNeedsReset</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">_lastTimeoutBaseTime</span><span class="w"> </span><span class="p">==</span><span class="w"> </span><span class="m">0f</span><span class="p">;</span><span class="w"></span>
<span class="linenos">50</span>
<span class="linenos">51</span><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="nf">CheckTimeout</span><span class="p">()</span><span class="w"></span>
<span class="linenos">52</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">53</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">UnityEngine</span><span class="p">.</span><span class="n">Time</span><span class="p">.</span><span class="n">realtimeSinceStartup</span><span class="p">;</span><span class="w"></span>
<span class="linenos">54</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">LastTimeoutBaseTimeNeedsReset</span><span class="p">)</span><span class="w"></span>
<span class="linenos">55</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="linenos">56</span><span class="w"> </span><span class="n">_lastTimeoutBaseTime</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">t</span><span class="p">;</span><span class="w"></span>
<span class="linenos">57</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">58</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">t</span><span class="w"> </span><span class="p">-</span><span class="w"> </span><span class="n">_lastTimeoutBaseTime</span><span class="p">)</span><span class="w"> </span><span class="p">&gt;=</span><span class="w"> </span><span class="n">_timeOutInSeconds</span><span class="p">;</span><span class="w"></span>
<span class="linenos">59</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">60</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="linenos">61</span><span class="p">}</span><span class="w"></span>
</pre></div>
</div>
</section>

File diff suppressed because one or more lines are too long